JVM内部结构
总览:
标记字(MarkWord)内部结构(64位):
锁状态 | 56bit | 1bit | 4bit | 1bit | 2bit | ||
25bit | 31bit | 是否偏向锁 | 锁标志位 | ||||
无锁 | unused | hashCode | Cms_free | 分代年龄 | 0 | 01 | |
偏向锁 | 线程ID | Epoch:2bit | Cms_free | 分代年龄 | 1 | 01 | |
轻量锁 | 指向栈中的锁记录指针 | 00 | |||||
重量锁 | 指向堆中的锁对象指针 | 10 | |||||
GC标记 | 空 | 11 |
垃圾回收器关系图(JDK1.8):
垃圾回收器选型:
单CPU:-XX:+UseSerialGC
多CPU、吞吐量最大化:-XX:+UseParrallelGC
多CPU、响应优先:-XX:+UseConcMarkSweepGC
G1:CMS的上位替代,稳定性有待观察
JAVA 类加载过程:
-
加载:加载类的字节码,在方法区创建对应的数据结构(字段、方法、接口等),在堆中生成一个对应的 java.lang.Class 实例。
-
链接:
-
- 验证:验证字节码文件是否符合JVM虚拟机的规范,引用是否存在。
- 准备:给静态字段分配内存,给常量=常量赋初始值。
- 解析:将类中的符号引用转换为直接引用。
-
初始化:触发父类初始化,执行<clinit>()方法,执行静态代码块,给静态变量、常量=字面量赋初始值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?