JVM
2021-02-18 10:48:56 8 举报
jvm结构图
作者其他创作
大纲/内容
0x112name: jackage: 10
幸存0区
通常所说的栈(Stack),是指虚拟机栈。 虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、 byte、char 、 short 、 int 、 float 、 long 、double) 、 对象引用(reference类型,它不等同于对象本身, 是对象在堆内存的首地址) 。 方法执行完, 自动释放。
JVM的位置
本地方法接口
方法区
堆的区域结构
JRE --- JVM
jack: 0x112
元空间(Perm)
A
类加载器Class Loader
B
方法区Method Area
本地方法库
C
栈:栈内存,主管程序的运行,生命周期与线程同步;线程结束,栈内存也就释放,对来栈来说不存在垃圾回收问题。栈:8大基本类型+对象引用+实现的方法
硬件体系
栈Stack
main
.class
运行时数据区Runtime Data Area
本地方法栈Native Method Stack
伊甸园区(Eden)
常量区
堆(Heap) , 此内存区域的唯一目的就是存放对象实例, 几乎所有的对象实例都在这里分配内存。 这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
堆
常量池
tom: 0x111
Class Personnameage
.java
栈
老年区(Old)
程序计数器
0x111name: tomage: 10
幸存1区
静态方法区
方法区(Method Area) , 用于存储已被虚拟机加载的类息、 常量、 静态变量、 即时编译器编译后的代码等数据。
GC分代算法将内存区域分为两部分:新生代和老年代。根据新生代和老年代中对象的不同特点,使用不同的GC算法。新生代对象的特点是:创建出来没多久就可以被回收(例如虚拟机栈中创建的对象,方法出栈就会销毁)。也就是说,每次回收时,大部分是垃圾对象,所以新生代适用于复制算法。老年代的特点是:经过多次GC,依然存活。也就是说,每次GC时,大部分是存活对象,所以老年代适用于标记压缩算法。由于以上特性所以在新生区中会有3个结构区(伊甸园区,from区,to区)
堆Heap
JVM结构
对象的内存结构
执行引擎
0 条评论
回复 删除
下一页