JVM体系结构
2021-08-10 08:59:41 1 举报
包括编译、加载、JIT、内存、GC、对象描述
作者其他创作
大纲/内容
标记清除
元数据常量和静态变量
标记压缩
静态变量
1、启用指针压缩:XX:+UseCompressedOops(默认开启),禁止指针压缩:XX:UseCompressedOops
动态链接
1、父类加载器加载成功则返回。2、父类加载器加载失败,则子类加载。3、都不成功则是NoClassFound。
用户自定义加载器User ClassLaoder
类元信息
适合新生代
方法出口
线程共享区
栈(线程)
C1 C2,-server-client
OBJ2
新生代1/3,轻GC
翻译机
To1/10
老年区
老年代2/3
Obj
应用:CLASSPATH路径中的类,类加载sun.misc.Launcher$AppClassLoader
栈线程
java文件
分析与字节码生成
方法表
栈帧
操作数区
方法区/元空间
实例数据
JVM内部引用对象
1、收到类加载请求。2、本级别加载器缓存中包含,则返回。不包含,则向上委托。3、一直委托到启动加载器。
局部变量表
OBJ1
类型信息
指针类型 4 (压缩)
堆
From1/10
类对象
Class实例引用
启动加载器Bootstrap ClassLaoder
存活区
字段信息
Javac 编译
本地方法区JNI
局部变量表:1、用于存放8种基本类型,其中long/double类型的值读到线程内存中时,可能是两次32位值的写操作,线程不安全,用volatile或者syncxxx来修饰;2、用于存储对象引用(对象在堆存储)。操作数区:临时变量值存储,load操作加载至此动态链接:指向class的常量池位置方法出口:执行放回的上一级栈帧地址
扩展加载器Extension ClassLaoder
机器码
对象应用
常量
JIT
数组长度(数组才有)4
Java
复制
启动:Java_Home/lib下的类加载,如rt.jar
填充对齐
静态对象应用
本地方法接口
执行引擎
程序计数器
本地方法栈:为Natvie提供服务程序计数器:CPU中断,会有线程切换,程序计数器会记录当前线程执行的字节码指令地址(行号),以便线程切换后能恢复到正确的执行位置,唯一没有OOM错误区域
解释器+JIT编译 共存
Root 根
CLASS
Mark word 8
常驻异常对象
应用加载器Application ClassLaoder
JVM运行时数据区
对象头
返回上一栈帧调用位置
方法信息
解释器
本地方法库
指针压缩的原理是,利用java对象补齐的特性,可以省略多余的0.最大的内存32G,否则容易丢失地址
线程隔离区
同步锁持有对象
JVM执行引擎
Full GC
根可达算法
类型常量池
类加载器引用
逐行解释字节码
栈中变量
GC
类型指针
内存地址指针
可回收对象
扩展:Java_Home/lib/ext下的类加载
Class文件
适合老年代
注解处理
类加载器双亲委派机制
存活对象
字节码
本地方法栈
伊甸园区8/10
解析与填充符号表
热点代码
计数器
类加载器
自定义的ClassLoader
0 条评论
回复 删除
下一页