内存模型 & 分区
1.Java堆
定义:堆内存,也是垃圾管理器主要区域,因此也称为GC堆
作用:存放 java对象实例
特点:JVM中内存最大,线程共享
2.java虚拟机栈
定义:栈内存
作用:存放局部变量。(方法执行完后释放)
特点:线程私有,生命周期与线程相同
注:局部变量所需要的内存空间在编译时就会完成分配,在方法运行时,不会改变大小
3.本地方法栈
十分类似 Java虚拟机栈
与其的区别是:服务对象,本地方法栈为执行Native方法服务(java与c交互)
4.方法区
定义:堆的一个逻辑部分,为了与java堆区分,又称为 “非堆”区域(Non -Heap)
作用:存储已被虚拟机加载的类信息,常量,静态变量等数据
特点:线程共享
注:该区域的内存回收,主要是针对运行时常量池和对类的卸载。回收条件苛刻,很少出现垃圾收集
5.程序计数器
定义:当前线程所执行的字节码的行号指示器
作用:实现异常处理,线程恢复等基础功能
特点:线程私有,内存空间少
原理:通过改变计数器的值,来选下一条执行的字节码指令