《深入Java虚拟机:JVM G1GC的算法与实现》是由人民邮电出版社出版的一本关于Java虚拟机方面的书籍,作者是中村成洋,主要介绍了关于Java虚拟机、JVM、G1GC、算法与实现方面的知识内容,目前在Java虚拟机类书籍综合评分为:8.5分。
书籍介绍
编辑推荐
结合实用JVM,图解Java垃圾回收机制的关键技术!
·90张图表+33段代码,轻松理解G1GC算法原理
·HotSpotVM源码剖析,深入探讨G1GC具体实现
1.深入Java虚拟机底层原理,详细解读经典GC算法;
2.理论结合实际,基于HotSpotVM源码探讨具体实现;
3.图文并茂、深入浅出,辅以大量插图和代码细致讲解。
内容简介
本书深入Java虚拟机底层原理,对JVM内存管理中的垃圾回收算法G1GC进行了详细解读。全书分为“算法篇”和“实现篇”两大部分:前一部分主要介绍G1GC的算法原理,内容包括G1GC的并发标记、转移功能、软实时性的实现和分代G1GC模式;后一部分聚焦算法篇中没有详细讲解的实现部分,基于HotSpotVM源码,讲解对象管理功能、内存分配器的机制、线程管理方法和G1GC的具体实现。
本书以图配文,通俗易懂,既系统介绍了G1GC的基础算法,又贴近现实,剖析了实用JVM中的G1GC实现,同时还包含了作者对G1GC的研究成果和独到见解,是深入理解JVM和G1GC机制的佳作。
作者简介
中村成洋(作者) 生于1985年。日本网络应用通信研究所研究员。因为偶然的机会对GC产生浓厚兴趣,本人却说不清为何喜欢GC,被人追问原因时,总是回答“是缘分”。现在是CRuby的committer,每天致力于GC的改善。著有《垃圾回收的算法与实现》。 吴炎昌(译者) 毕业于西北工业大学软件工程专业,曾供职于多家日本软件公司,从事系统开发工作。2015年回国后加入美团点评,现任系统研发工程师。爱好旅行、电影和品尝各种美食,有一位志趣相投的伴侣。
目录
- 算法篇
- 第 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