一个关于Java虚拟机的问题

public void aa(){
    int a = 1;
    final int b = 2;
}

public void bb(){
    Integer a = new Integer(3);
    String b = new String("4");
    final c = "5";
}

分别运行上面aa、bb两个方法,Java虚拟机在堆和栈中各保存了哪些数据?

要了解虚拟机的底层原理的问题,应该从Java的class文件入手,可以将该端代码的class文件反编译一下看看字节码指令。
javap命令可以搜一下。

应该是这样的。

栈内存中保存了。1,2,5

堆内存中保存了。3,4

引用放在栈中,对象放在堆中。
aa方法:在栈中压入a,b两个int类型空间,分别放着数字1,2,aa方法放回后a,b实现从栈中弹出。
bb方法:在栈中压入a,b,c三个引用类型空间,分别放着new Integer(3),String("4"),“5”三个对象的地址
在堆中有一个Integer类型对象3,和String类型对象"4"。在常量池中有有一个String类型对象“5”。ff返回后
abc三个引用失效从栈中弹出,在堆的对象是jvm处理的,什么时候销毁我们也不清楚。常量池的的空间的生命周期和进程一样