JAVA虚拟机内存结构

115 阅读1分钟

内存模型 & 分区

image.png

1.Java堆

定义:堆内存,也是垃圾管理器主要区域,因此也称为GC堆

作用:存放 java对象实例

特点:JVM中内存最大,线程共享

2.java虚拟机栈

定义:栈内存

作用:存放局部变量。(方法执行完后释放)

特点:线程私有,生命周期与线程相同

注:局部变量所需要的内存空间在编译时就会完成分配,在方法运行时,不会改变大小

3.本地方法栈

十分类似 Java虚拟机栈

与其的区别是:服务对象,本地方法栈为执行Native方法服务(java与c交互)

4.方法区

定义:堆的一个逻辑部分,为了与java堆区分,又称为 “非堆”区域(Non -Heap)

作用:存储已被虚拟机加载的类信息,常量,静态变量等数据

特点:线程共享

注:该区域的内存回收,主要是针对运行时常量池和对类的卸载。回收条件苛刻,很少出现垃圾收集

5.程序计数器

定义:当前线程所执行的字节码的行号指示器

作用:实现异常处理,线程恢复等基础功能

特点:线程私有,内存空间少

原理:通过改变计数器的值,来选下一条执行的字节码指令