关于HotSpot(OpenJDK12)的内幕,对某个部分感兴趣的朋友可以创建Issue说明。Github Just-In-Time更新,博客滞后更新。(注:WIP表示未完成的文章)
- 模板解释器
- 简介
- 解释器的两种实现
- 解释器
- 抽象解释器
- 模板解释器
- 解释器生成器
- 生成器与解释器的关系
- 示例:数组越界异常例程生成
- 方法编译
- 编译器代理
- nmethod
- 栈上替换(On Stack Replacement)
- 编译重放(ReplayCompiles)
- C1编译器中间表示
- C1编译器线程
- 中间表示简介
- 构造HIR
- 构造LIR
- C1编译器HIR的构造
- 简介
- HIR的设计
- 高观点层次的字节码到HIR构造
- 源码层次的字节码到HIR构造
- C1编译器优化:条件表达式消除
- 条件传送指令
- C1编译器中的条件表达式消除
- CEE示例
- C1编译器优化:全局值编号(GVN)
- 值编号
- C1编译器的全局值编号
- 示例:公共子表达式消除(成功)
- 示例:代数恒等式变换(失败)
- 循环不变代码外提(成功但受限)
- 加载字节码到JVM WIP
- 字节码文件解析器
- 类加载器
- Bootstrap类加载器 WIP
- Java的方法调用
- 方法调用模块入口
- 寻找调用方法
- 建立栈帧
- Java方法调用
- 总结
- 附1:使用hsdis查看对应的汇编表示
- 附2:解释器入口点
- 安全点
- 安全点简介
- 创建安全点
- 线程局部握手
- 白盒测试API
- 基于线程握手的实现
- Java分代堆
- 宇宙初始化
- 创建Java堆
- 初始化Java堆
- JVM分代堆详细结构
- CollectedHeap
- GenCollectedHeap
- SerialHeap
- 分代堆中的卡表代
- Epsilon GC
- Epsilon GC简介
- EpsilonGC创建
- 内存分配
- 普通内存分配
- TLAB内存分配
- 垃圾回收
- Serial垃圾回收器 (一) Full GC
0. Serial垃圾回收器Full GC
- 阶段1:标记存活对象
- 阶段2:计算对象新地址
- 阶段3:调整对象指针
- 阶段4:移动对象
- Serial垃圾回收器 (二) Minor GC
- DefNewGeneration垃圾回收
- 快速扫描闭包(FastScanClosure)
- 新生代到To survivor的复制
- GC屏障
- 快速成员处理闭包(FastEvacuateFollowersClosure)
- UseParallelGC和UseParallelOldGC的区别
- HotSpot源码结构 WIP
- hotspot的启动流程与main方法调用
- JVM新日志接口-xlog
- JVMTI(JVM Tool Interface)
- Visual Studio2017编译调试OpenJDK12
- Xcode编译调试OpenJDK12
- 文章中JVM,jvm,hotspot,HotSpot等都表示的OpenJDK12的HotSpot虚拟机实现;From,from,From survivor一个意思;To,To survivor一个意思;
- 代码的部分干扰比如断言,繁琐不重要的日志记录已清除
- 强烈建议每一章按照自上而下的顺序阅读,因为下一篇文章很有可能需要上一篇文章的知识
- [1] Christian Wimmer: SSA Form for the Java HotSpot™ Client Compiler
- [2] Christian Wimmer: Linear Scan Register Allocation for the Java HotSpot™ Client Compiler
- [3] Thomas Würthinger, Christian Wimmer, Hanspeter Mössenböck: Visualization of Program Dependence Graphs
- [4] Michael Paleczny, Christopher Vick,Cliff Click: The Java HotSpotTM Server Compiler
- [5] Cliff Click: From Quads to Graphs: An Intermediate Representation's Journey
- [6] http://compileroptimizations.com/index.html