算法篇
第1章 G1GC是什么
1.1 G1GC和实时性 2
1.2 堆结构 5
1.3 执行过程 5
1.4 并发标记和转移 7
第2章 并发标记
2.1 什么是并发标记 8
2.2 标记位图 9
2.3 执行步骤 10
2.4 步骤①——初始标记阶段 10
2.5 步骤②——并发标记阶段 12
2.6 步骤③——最终标记阶段 18
2.7 步骤④——存活对象计数 19
2.8 步骤⑤——收尾工作 21
2.9 总结 22
第3章 转移
3.1 什么是转移 25
3.2 转移专用记忆集合 26
3.3 转移专用写屏障 28
3.4 转移专用记忆集合维护线程 31
3.5 热卡片 32
3.6 执行步骤 32
3.7 步骤①——选择回收集合 33
3.8 步骤②——根转移 34
3.9 步骤③——转移 39
3.10 标记信息的作用 39
3.11 总结 40
第4章 软实时性
4.1 用户的需求 41
4.2 预测转移时间 42
4.3 预测可信度 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 什么是HotSpotVM 58
7.2 什么是OpenJDK 58
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 TLAB 90
第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
· · · · · · (
收起)
2 有用 ever 2021-01-02 01:16:04
我应该是购书后最早读完的。gc过程介绍的很详细。
0 有用 RongieZeng 2021-12-27 23:17:52
只看了算法篇,不过感觉讲得也不是很清晰,后来还是从晚上看了一些文章才基本理顺g1gc是怎么运转的
0 有用 顾白 2022-05-08 22:57:39
翻译有些差
0 有用 蒙大拿 2023-08-21 15:37:18 安徽
翻译稀烂,这译者非要一遍一遍的用“转移专用记忆集合”来描述RSet……有些地方则完全不明所以:“另外,并发标记中的STAB本地队列和SATB队列集合中的引用也包含在$root中,会被转移,这是因为他们的引用地址都必须改为转移后的地址。”,你译者自己读的通这句话???
0 有用 王悟空 2021-03-28 18:24:50
感觉读起来不太顺畅
0 有用 蒙大拿 2023-08-21 15:37:18 安徽
翻译稀烂,这译者非要一遍一遍的用“转移专用记忆集合”来描述RSet……有些地方则完全不明所以:“另外,并发标记中的STAB本地队列和SATB队列集合中的引用也包含在$root中,会被转移,这是因为他们的引用地址都必须改为转移后的地址。”,你译者自己读的通这句话???
0 有用 顾白 2022-05-08 22:57:39
翻译有些差
0 有用 RongieZeng 2021-12-27 23:17:52
只看了算法篇,不过感觉讲得也不是很清晰,后来还是从晚上看了一些文章才基本理顺g1gc是怎么运转的
0 有用 豆友186958685 2021-07-12 07:28:45
理论和细节讲解的还是比较清楚,不过有些算法细节需要结合《垃圾回收的算法与实现》一起看。JVM实现细节可以结合《深入理解Java虚拟机一起看》
1 有用 如约而至 2021-05-06 10:05:01
书非常的不错,😂喜欢日系作者这种细致入微的行文风格,全文通俗易懂,每次产生一个小疑惑,往后翻翻就能释疑,不会埋坑把人忽悠的云里雾里的。全书通过分析G1的整体实现,很好的将自动内存管理机制那些散乱的知识点串联了起来。补上了周志明大佬书里的一些短板与错误点。再结合该作作者的另一本书《垃圾回收算法手册》以及国内作者的《新一代垃圾收集器ZGC的设计与实现》等等书籍可以对JVM有一个直观的理解模型,大体完成... 书非常的不错,😂喜欢日系作者这种细致入微的行文风格,全文通俗易懂,每次产生一个小疑惑,往后翻翻就能释疑,不会埋坑把人忽悠的云里雾里的。全书通过分析G1的整体实现,很好的将自动内存管理机制那些散乱的知识点串联了起来。补上了周志明大佬书里的一些短板与错误点。再结合该作作者的另一本书《垃圾回收算法手册》以及国内作者的《新一代垃圾收集器ZGC的设计与实现》等等书籍可以对JVM有一个直观的理解模型,大体完成知识闭环。 (展开)