jvm(jvm内存模型)+jmm(java内存模型)
2023-08-08 02:36:08 25 举报
jvm(jvm内存模型)+jmm(java内存模型)
作者其他创作
大纲/内容
数组长度
Mark Work
java程序
准备
类型指针
常量池符号引用替换为直接引用【因为多态】
词法分析
字面量:文本字符串final常量池基本数据据类型
jre(jvm)
自定义加载器
Zxf.class
老年代(Old)2/3
运行时常量池
javac源代码编译器
符号引用:类和结构权限定名字段名称和描述方法名称和描述符
堆空间(Head)
本地内存
卸载
本地方法接口(Native interface)
<clinit>:方法是类构造器方法,只对类方法(static域和static代码块)进行初始化
线程私有区
硬件系统
语法分析
初始化
加载
元空间【方法区/永久区】(Meat Space)
幸存区(0/1)
类(class)信息属性方法类元信息【类型信息/类型的常量池/方法信息/字段信息/类加载器的引用信息/class对象实例引用信息/方法表】
解析
new初始化(new对象概念)
执行类构造器<clinit>,生成了Class对象,放入方法区中【初始化操作时】
注解抽象语法树
TLAB(线程本地内存)1
电脑系统(win、mac、linux)
直接内存
运行时数据区
类加载子系统
class对象
*我们所说的Class对象就是这个class信息
本地方法栈(Native Method Stack)
两个相互交换(保证同一个时间一个是空的)to(谁空谁是to)
根据验证后的类信息初始化类结构变量
新生代(New)1/3
对象头
验证文件格式/元数据/字节码/符号引用等
字节码生成器
链接阶段
Zxf.java
程序计数器(PC寄存器--计数器){ProgiamCounter Register}
执行引擎
语义分析
Survivor0【占1/10】(From s0)
验证
扩展加载器
对齐填充【8的整数倍】
根加载器
抽象语法树
TLAB(线程本地内存)2
本地方法库(Native Libra)
虚拟机栈
线程共享区域
字符串常量池
Survivor1【占1/10】(To s1)
栈帧
热点代码缓存(Hot Code Cache)JIT即时编译器
应用加载器
实例对象
这一部分针对的是jvm体系结构
双亲委派机制: 当前类加载器需要加载XX类时,不会自己直接加载,而是尝试将加载这个类向上委托给父加载器去完成,一直找到根加载器 (BootstrapClassLoader)如果父加载器能加载则由父加载器加载,否则由父加载器逆向由子加载器加载。好处: 如果外部想要重写JDK的系统类[如String] ,篡改系统类的实现,因为BootstrapClassLoader已经加载JDK的系统类,不会加载用户编写的类,从而一定程度防止了危险代码的植入
使用
1、获取class字节码文件的二进制字节流 2、将磁盘文件静态结构载入内方法区转换为运行时数据结构<类信息> 3、将载入后的类信息进行组装,在堆空间中生成类对象(class),作为数据入口
Eden 8/10(伊甸园区)
0 条评论
下一页