JVM底层执行流程
2023-11-16 19:25:06 10 举报
为你推荐
查看更多
JVM底层执行流程主要包括类加载、字节码校验、指令解析和执行、垃圾回收等步骤。首先,通过类加载器将.class文件加载到内存中生成Class对象;接着进行字节码校验,确保代码符合Java规范;然后,JVM将字节码转化为机器指令并按顺序执行;最后,当对象不再被使用时,垃圾回收器会自动释放内存空间。整个过程在JVM规范的约束下,保证了Java程序的跨平台性和高效性。
作者其他创作
大纲/内容
S1
方法区(常量,静态变量(对象的内存地址),类信息)
操作数栈
survivor区
Eden区满了之后会进行一次minor gc,使用可达性算法进行标记。将非垃圾对象放到survivor区,并且将对象头上的年龄加一。survivor区放不下的时候,会将非垃圾对象放到老年区。并且年龄超过15的非垃圾对象也会被放到老年区。当老年区也满的时候,就STW,让整个堆内存执行一次full gc。老年代也放不下的时候,就OOM了。
method()
Main.class
局部变量表
Eden区
(线程)栈
为什么要设计STW:垃圾回收线程和用户线程会同时执行,GC刚刚把这个局部对象标记为非垃圾对象,但是这个对象下一步就调用完释放了,就变成垃圾对象了。垃圾回收线程就很难结束,不如之间停掉其他线程,让垃圾回收线程专心做,效率还会更高。
类装载子系统
运行时数据区
8:1:1
栈帧
虚拟机栈
a+b=3(存放对局部变量运算操作产生的临时数据)
年轻代
c=内存地址
main线程
本地方法栈
编译
方法出入口
动态链接
full GC(整个堆内存执行一次垃圾回收)
S0
a=1
老年代
STW: Stop the word ,在做full gc 的时候,会停掉我们的用户线程,专心去做垃圾回收。
JVM虚拟机
堆
2/3
程序计数器
字节码执行引擎
mian主方法
1/3
minoc gc(在年轻代执行垃圾回收)
b=2
垃圾回收线程
堆(对象)
本地方法区
修改
Main.java
在主方法中从哪里调用的方法,再从哪里开始执行
JAVA虚拟机调优的最主要的目的是减少STW,让程序运行的更流畅
0 条评论
回复 删除
下一页