书籍详情
JVM G1源码分析和调优
作者:彭成寒 著
出版社:机械工业出版社
出版时间:2019-04-01
ISBN:9787111621973
定价:¥89.00
购买这本书可以去
内容简介
G1作为JVM中*新、*成熟的垃圾回收器,已经广泛应用在众多公司的生产环境中。本书详细介绍G1涉及的基本概念和运行原理,以及调优方法。主要内容共12章,主要内容有:第1~2章介绍垃圾回收的历史和应用的算法,以及基本概念。第3~7章从多方面分析G1的运行原理,如G1是如何分配对象的,G1的Refine线程、新生代回收、混合回收、FullGC等。第8章介绍垃圾回收过程中如何处理引用,第9章介绍G1引入的新特性:字符串去重,第10章介绍G1垃圾回收过程中线程如何达到安全点,第11章介绍如何选择垃圾回收器,第12章介绍了下一代垃圾回收器Shenandoah和ZGC。另外,为了降低学习难度,还给出了三个附录:附录A介绍如何开始阅读和调试JVM代码,附录B介绍如何使用NMT对JVM内存进行跟踪和调试,附录C介绍了Java程序员阅读JVM需要知道的一些C++知识。
作者简介
暂缺《JVM G1源码分析和调优》作者简介
目录
前 言
第1章 垃圾回收概述 1
1.1 Java发展概述 1
1.2 本书常见术语 4
1.3 回收算法概述 6
1.3.1 分代管理算法 7
1.3.2 复制算法 7
1.3.3 标记清除 8
1.3.4 标记压缩 9
1.3.5 算法小结 9
1.4 JVM垃圾回收器概述 9
1.4.1 串行回收 9
1.4.2 并行回收 10
1.4.3 并发标记回收 10
1.4.4 垃圾优先回收 10
第2章 G1的基本概念 14
2.1 分区 14
2.2 G1停顿预测模型 20
2.3 卡表和位图 22
2.4 对象头 24
2.5 内存分配和管理 27
2.6 线程 30
2.6.1 栈帧 32
2.6.2 句柄 34
2.6.3 JVM本地方法栈中的对象 36
2.6.4 Java本地方法栈中的对象 40
2.7 日志解读 40
2.8 参数介绍和调优 41
第3章 G1的对象分配 43
3.1 对象分配概述 43
3.2 快速分配 46
3.3 慢速分配 56
3.3.1 大对象分配 58
3.3.2 最后的分配尝试 60
3.4 G1垃圾回收的时机 61
3.4.1 分配时发生回收 61
3.4.2 外部调用的回收 61
3.5 参数介绍和调优 62
第4章 G1的Ref?ine线程 64
4.1 记忆集 64
4.2 Ref?ine线程的功能及原理 72
4.2.1 抽样线程 72
4.2.2 管理RSet 74
4.2.3 Mutator处理DCQ 78
4.2.4 Ref?ine线程的工作原理 78
4.3 Ref?inement Zone 85
4.4 RSet涉及的写屏障 86
4.5 日志解读 87
4.6 参数介绍和调优 90
第5章 新生代回收 93
5.1 YGC算法概述 93
5.2 YGC代码分析 96
5.2.1 并行任务 96
5.2.2 其他处理 115
5.3 YGC算法演示 116
5.3.1 选择CSet 117
5.3.2 根处理 117
5.3.3 RSet处理 118
5.3.4 复制 119
5.3.5 Redirty 120
5.3.6 释放空间 120
5.4 日志解读 121
5.4.1 YGC日志 121
5.4.2 大对象日志分析 125
5.4.3 对象年龄日志分析 125
5.5 参数介绍和调优 126
第6章 混合回收 129
6.1 并发标记算法详解 130
6.2 并发标记算法的难点 133
6.2.1 三色标记法 133
6.2.2 难点示意图 133
6.2.3 再谈写屏障 135
6.3 G1中混合回收的步骤 141
6.4 混合回收中并发标记处理的线程 145
6.4.1 并发标记线程启动的时机 147
6.4.2 根扫描子阶段 148
6.4.3 并发标记子阶段 152
6.4.4 再标记子阶段 159
6.4.5 清理子阶段 160
6.4.6 启动混合收集 167
6.5 并发标记算法演示 170
6.5.1 初始标记子阶段 171
6.5.2 根扫描子阶段 171
6.5.3 并发标记子阶段 171
6.5.4 再标记子阶段 172
6.5.5 清理子阶段 173
6.6 GC活动图 174
6.7 日志解读 174
6.8 参数优化 178
第7章 Full GC 181
7.1 Evac失败 181
7.2 串行FGC 187
7.2.1 标记活跃对象 188
7.2.2 计算对象的新地址 190
7.2.3 更新引用对象的地址 190
7.2.4 移动对象完成压缩 193
7.2.5 后处理 194
7.3 并行FGC 196
7.3.1 并行标记活跃对象 197
7.3.2 计算对象的新地址 198
7.3.3 更新引用对象的地址 200
7.3.4 移动对象完成压缩 200
7.3.5 后处理 201
7.4 日志解读 201
7.5 参数介绍和调优 202
第8章 G1中的引用处理 203
8.1 引用概述 203
8.2 可回收对象发现 207
8.3 在GC时的处理发现列表 210
8.4 重新激活可达的引用 214
8.5 日志解读 215
8.6 参数介绍和调优 215
第9章 G1的新特性:字符串去重 217
9.1 字符串去重概述 217
9.2 日志解读 220
9.3 参数介绍和调优 222
9.4 字符串去重和String.intern的区别 222
9.5 String.intern中的实现 223
第10章 线程中的安全点 226
10.1 安全点的基本概念 226
10.2 G1并发线程进入安全点 227
10.3 解释线程进入安全点 230
10.4 编译线程进入安全点 230
10.5 正在执行本地代码的线程进入安全点 233
10.6 安全点小结 236
10.7 日志分析 236
10.8 参数介绍和调优 238
第11章 垃圾回收器的选择 241
11.1 如何衡量垃圾回收器 241
11.2 G1调优的方向 243
第12章 新一代垃圾回收器 247
12.1 Shenandoah 247
12.2 ZGC 258
附录A 编译调试JVM 262
附录B 本地内存跟踪 272
附录C 阅读JVM需要了解的C++知识 276
第1章 垃圾回收概述 1
1.1 Java发展概述 1
1.2 本书常见术语 4
1.3 回收算法概述 6
1.3.1 分代管理算法 7
1.3.2 复制算法 7
1.3.3 标记清除 8
1.3.4 标记压缩 9
1.3.5 算法小结 9
1.4 JVM垃圾回收器概述 9
1.4.1 串行回收 9
1.4.2 并行回收 10
1.4.3 并发标记回收 10
1.4.4 垃圾优先回收 10
第2章 G1的基本概念 14
2.1 分区 14
2.2 G1停顿预测模型 20
2.3 卡表和位图 22
2.4 对象头 24
2.5 内存分配和管理 27
2.6 线程 30
2.6.1 栈帧 32
2.6.2 句柄 34
2.6.3 JVM本地方法栈中的对象 36
2.6.4 Java本地方法栈中的对象 40
2.7 日志解读 40
2.8 参数介绍和调优 41
第3章 G1的对象分配 43
3.1 对象分配概述 43
3.2 快速分配 46
3.3 慢速分配 56
3.3.1 大对象分配 58
3.3.2 最后的分配尝试 60
3.4 G1垃圾回收的时机 61
3.4.1 分配时发生回收 61
3.4.2 外部调用的回收 61
3.5 参数介绍和调优 62
第4章 G1的Ref?ine线程 64
4.1 记忆集 64
4.2 Ref?ine线程的功能及原理 72
4.2.1 抽样线程 72
4.2.2 管理RSet 74
4.2.3 Mutator处理DCQ 78
4.2.4 Ref?ine线程的工作原理 78
4.3 Ref?inement Zone 85
4.4 RSet涉及的写屏障 86
4.5 日志解读 87
4.6 参数介绍和调优 90
第5章 新生代回收 93
5.1 YGC算法概述 93
5.2 YGC代码分析 96
5.2.1 并行任务 96
5.2.2 其他处理 115
5.3 YGC算法演示 116
5.3.1 选择CSet 117
5.3.2 根处理 117
5.3.3 RSet处理 118
5.3.4 复制 119
5.3.5 Redirty 120
5.3.6 释放空间 120
5.4 日志解读 121
5.4.1 YGC日志 121
5.4.2 大对象日志分析 125
5.4.3 对象年龄日志分析 125
5.5 参数介绍和调优 126
第6章 混合回收 129
6.1 并发标记算法详解 130
6.2 并发标记算法的难点 133
6.2.1 三色标记法 133
6.2.2 难点示意图 133
6.2.3 再谈写屏障 135
6.3 G1中混合回收的步骤 141
6.4 混合回收中并发标记处理的线程 145
6.4.1 并发标记线程启动的时机 147
6.4.2 根扫描子阶段 148
6.4.3 并发标记子阶段 152
6.4.4 再标记子阶段 159
6.4.5 清理子阶段 160
6.4.6 启动混合收集 167
6.5 并发标记算法演示 170
6.5.1 初始标记子阶段 171
6.5.2 根扫描子阶段 171
6.5.3 并发标记子阶段 171
6.5.4 再标记子阶段 172
6.5.5 清理子阶段 173
6.6 GC活动图 174
6.7 日志解读 174
6.8 参数优化 178
第7章 Full GC 181
7.1 Evac失败 181
7.2 串行FGC 187
7.2.1 标记活跃对象 188
7.2.2 计算对象的新地址 190
7.2.3 更新引用对象的地址 190
7.2.4 移动对象完成压缩 193
7.2.5 后处理 194
7.3 并行FGC 196
7.3.1 并行标记活跃对象 197
7.3.2 计算对象的新地址 198
7.3.3 更新引用对象的地址 200
7.3.4 移动对象完成压缩 200
7.3.5 后处理 201
7.4 日志解读 201
7.5 参数介绍和调优 202
第8章 G1中的引用处理 203
8.1 引用概述 203
8.2 可回收对象发现 207
8.3 在GC时的处理发现列表 210
8.4 重新激活可达的引用 214
8.5 日志解读 215
8.6 参数介绍和调优 215
第9章 G1的新特性:字符串去重 217
9.1 字符串去重概述 217
9.2 日志解读 220
9.3 参数介绍和调优 222
9.4 字符串去重和String.intern的区别 222
9.5 String.intern中的实现 223
第10章 线程中的安全点 226
10.1 安全点的基本概念 226
10.2 G1并发线程进入安全点 227
10.3 解释线程进入安全点 230
10.4 编译线程进入安全点 230
10.5 正在执行本地代码的线程进入安全点 233
10.6 安全点小结 236
10.7 日志分析 236
10.8 参数介绍和调优 238
第11章 垃圾回收器的选择 241
11.1 如何衡量垃圾回收器 241
11.2 G1调优的方向 243
第12章 新一代垃圾回收器 247
12.1 Shenandoah 247
12.2 ZGC 258
附录A 编译调试JVM 262
附录B 本地内存跟踪 272
附录C 阅读JVM需要了解的C++知识 276
猜您喜欢