新书推荐 |《JVM G1源码分析和调优》

新书推荐

《JVM G1源码分析和调优》

长按二维码
了解及购买

由资深Java工程师撰写的实战经验。

编辑推荐

本书由资深Java工程师撰写,是他10多年Java开发经验的结晶,作者在实际开发中积累了丰富的一线资料,分享了非常实用的开发经验。本书详细介绍G1涉及的基本概念和运行原理,以及调优方法。对提高Java开发质量打造内功。

内容简介

本书由资深Java工程师撰写,是他10多年Java开发经验的结晶,作者在实际开发中积累了丰富的一线资料,分享了非常实用的开发经验。本书详细介绍G1涉及的基本概念和运行原理,以及调优方法。主要内容共12章:第1~2章介绍垃圾回收的历史和应用的算法,以及基本概念;第3~7章从多方面分析G1的运行原理,如G1是如何分配对象的,G1 Refine线程的原理,以及新生代回收、混合回收、Full GC等;第8章介绍垃圾回收过程中如何处理引用;第9章介绍G1引入的新特性:字符串去重;第10章介绍G1垃圾回收过程中线程如何到达安全点;第11章介绍如何选择垃圾回收器;第12章介绍了下一代垃圾回收器Shenandoah和ZGC。另外,为了降低学习难度,本书还给出了3个附录:附录A介绍如何开始阅读和调试JVM代码;附录B介绍如何使用NMT对JVM内存进行跟踪和调试;附录C介绍了Java程序员阅读JVM需要知道的一些C++知识。

作者简介

彭成寒 

高级Java工程师,目前主要从事风控系统设计、算法建模、大数据处理等工作。有超过10年的Java和C++开发经验。

目录

前言

第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

你与世界

只差一个

公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值