-
程序计数器,指向程序当前运行的位置
-
栈(JVM栈),存放 函数、当前运行时的临时变量,存储的是对象的地址,最终指向堆存储的实际对象;如果一个对象在方法中new出来,并且只在这个方法中使用,这个对象会存放在栈中,当方法结束就会清理掉这个方法栈,减轻了GC的压力(JDK6-Java逃逸)
本地方法栈+程序计数器+栈(JVM栈),叫栈区,是线程私有的,有多少个线程就有多少个栈区
JVM运行过程中的内存变化
public static void main(String[] args){
int a=10;
fun1(a); //打印 11
System.out.println(a); //打印 10
}
static fun1(int a){
a++;
System.out.println(a);
}
如上代码,main方法中,fun1() 结束时,会清理掉fun1()的方法栈,此时再打印 a,会去读取main 方法中的 变量 a,值为 10