预测可信度43
4.4 GC暂停处理的调度44
4.5 并发标记中的暂停处理46
第5章 分代G1GC模式
5.1 不同点47
5.2 新生代区域48
5.3 分代对象转移49
5.4 执行过程简述49
5.5 分代选择回收集合51
5.6 设置最大新生代区域数51
5.7 GC的切换52
5.8 GC执行的时机52
第6章 算法篇总结
6.1 关系图53
6.2 优点54
6.3 缺点54
6.4 结束语55
实现篇
第7章 准备工作
7.1 什么是HotSpotVM58
7.2 什么是OpenJDK58
7.3 获取源码59
7.4 代码结构60
7.5 两个特殊类61
7.6 适用于各种操作系统的接口63
第8章 对象管理功能
8.1 对象管理功能的接口64
8.2 对象管理功能的全貌65
8.3 CollectedHeap类66
8.4 CollectorPolicy类67
8.5 各个GC类68
第9章 堆结构
9.1 VM堆70
9.2 G1GC堆72
9.3 常驻空间75
第10章 分配器
10.1 内存分配的流程76
10.2 VM堆的申请77
10.3 VM堆的分配79
10.4 对象的分配86
10.5 TLAB90
第11章 对象结构
11.1 oopDesc类92
11.2 klassOopDesc类93
11.3 Klass类94
11.4 类之间的关系95
11.5 不要在oopDesc类中定义虚函数96
11.6 对象头97
第12章 HotSpotVM的线程管理
12.1 线程操作的抽象化103
12.2 Thread类103
12.3 线程的生命周期104
12.4 Windows线程的创建107
12.5 Windows线程的处理开始110
12.6 Linux线程的创建113
12.7 开始Linux线程的处理117
第13章 线程的互斥处理
13.1 什么是互斥处理119
13.2 互斥量119
13.3 监视器120
13.4 监视器的实现122
13.5 Monitor类127
13.6 Mutex类129
13.7 MutexLocker类130
第14章 GC线程(并行篇)
14.1 并行执行的流程132
14.2 AbstractWorkGang类136
14.3 AbstractGangTask类137
14.4 GangWorker类137
14.5 并行GC的执行示例138
第15章 GC线程(并发篇)
15.1 ConcurrentGCThread类146
15.2 SuspendibleThreadSet类147
15.3 安全点150
15.4 VM线程152
第16章 并发标记
16.1 并发标记的全貌155
16.2 步骤①——初始标记阶段160
16.3 步骤②——并发标记阶段168
16.4 步骤③——最终标记阶段170
16.5 步骤④——存活对象计数172
16.6 步骤⑤——收尾工作172
第17章 转移
17.1 转移的全貌174
17.2 步骤①——选择回收集合178
17.3 步骤②——根转移181
17.4 步骤③——转移185
第18章 预测与调度
18.1 根据历史记录进行预测187
18.2 并发标记的调度194
18.3 转移的调度195
第19章 准确式GC的实现
19.1 栈图197
19.2 句柄区域与句柄标记209
第20章 写屏障的性能开销
20.1 运行时切换GC算法212
20.2 解释器的写屏障214
20.3 JIT编译器的写屏障216
后记220
参考文献223