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处理的,什么时候销毁我们也不清楚。常量池的的空间的生命周期和进程一样