书籍详情

深入探索JVM垃圾回收:ARM服务器垃圾回收的挑战和优化

深入探索JVM垃圾回收:ARM服务器垃圾回收的挑战和优化

作者:彭成寒 著

出版社:机械工业出版社

出版时间:2022-08-01

ISBN:9787111708773

定价:¥129.00

购买这本书可以去
内容简介
  本书介绍JVM和垃圾回收基础知识、垃圾回收原理和实现、JVM垃圾回收的参数、ARM服务器上的GC优化和调整,涉及部分垃圾回收的理论知识,但更关注工程实践。希望通过对实践的分析,让读者了解如何实现一款“令人满意”的垃圾回收器,即满足业务诉求,在停顿时间、吞吐量、资源消耗、实现复杂度、稳定性等方面进行了折中的垃圾回收器。 全书共分为四个部分:第1部分,介绍虚拟机执行的基础知识以及垃圾回收的相关知识;第2部分,介绍JVM中实现的六种垃圾回收算法;第3部分,介绍JVM提供了哪些参数用于控制垃圾回收的运行;第4部分,以鲲鹏920为例介绍ARM服务器以及在ARM服务器下如何实现GC才能充分发挥硬件的性能。
作者简介
  彭成寒虚拟机技术专家,目前主要从事JVM、V8和WebAssembly等虚拟机的研究和开发。他有超过15年的工作经验,从事过应用软件、大数据开发等工作。他是开源社区OpenEuler技术委员会委员,负责Compiler SIG;还是毕昇JDK的主要维护者和贡献者,著有《JVM G1源码分析和调优》《新一代垃圾回收器ZGC设计与实现》。
目录
【第一部分】 Java虚拟机和垃圾回收基础知识

第1章 Java代码执行过程介绍3
1.1 代码执行过程概述3
1.1.1 编译执行4
1.1.2 解释执行4
1.1.3 混合执行4
1.2 从C代码执行过程看编译器和操作系统协同工作5
1.2.1 从源代码到目标代码5
1.2.2 操作系统如何执行目标代码7
1.3 从C 代码的执行过程看编译器支持面向对象语言9
1.3.1 封装支持10
1.3.2 继承支持11
1.3.3 多态支持12
1.4 Java代码执行过程简介13
1.4.1 Java代码到字节码15
1.4.2 JVM加载字节码16
1.4.3 解释执行17
1.4.4 编译执行22
1.5 内存管理26
1.6 线程管理27
1.7 扩展阅读:JIT概述27

第2章 JVM中垃圾回收相关的基本知识30
2.1 GC算法分类30
2.2 GC涉及的对象表示32
2.3 GC算法概述34
2.3.1 复制算法34
2.3.2 标记清除算法36
2.3.3 标记压缩算法37
2.3.4 分代回收38
2.4 GC的根40
2.4.1 强根40
2.4.2 Java引用引入的弱根42
2.4.3 JVM优化实现引入的弱根43
2.4.4 JVM中根的构成45
2.5 安全点46
2.5.1 解释线程进入安全点46
2.5.2 编译线程进入安全点47
2.5.3 本地线程进入安全点48
2.5.4 JVM内部并发线程进入安全点48
2.5.5 安全点小结49
2.6 扩展阅读:垃圾回收器请求内存设计50

【第二部分】 JVM垃圾回收器详解

第3章 串行回收57
3.1 分代堆内存管理概述57
3.1.1 堆设计58
3.1.2 分代边界60
3.1.3 回收设计思路62
3.2 新生代内存管理63
3.2.1 新生代内存分配64
3.2.2 垃圾回收的触发机制67
3.2.3 适用于单线程的复制回收算法69
3.2.4 适用于分代的复制回收算法73
3.2.5 引用集管理75
3.3 老生代内存管理79
3.3.1 堆空间回收的触发80
3.3.2 堆空间回收算法过程介绍81
3.3.3 适用于分代的标记压缩算法83
3.3.4 标记-压缩的优化86
3.4 扩展阅读:不同的复制算法比较及对程序员的启迪88

第4章 并发标记清除回收92
4.1 内存管理92
4.2 并行的新生代回收95
4.2.1 一般根集合的并行处理96
4.2.2 老生代到新生代引用的并行处理97
4.2.3 卡表的竞争操作介绍99
4.2.4 并行复制算法卡表设计103
4.3 并发回收的难点105
4.3.1 三色标记法105
4.3.2 难点示意图105
4.3.3 读屏障处理107
4.3.4 写屏障之增量标记107
4.3.5 写屏障之SATB标记108
4.4 并发的老生代回收108
4.4.1 内存管理109
4.4.2 标记清除算法概述112
4.4.3 并发算法触发时机113
4.4.4 并发标记清除之初始标记114
4.4.5 并发标记清除之并发标记116
4.4.6 并发标记清除之预清理118
4.4.7 并发标记清除之可终止预清理120
4.4.8 并发标记清除之再标记123
4.4.9 并发标记清除之清除124
4.4.10 并发标记清除之内存空间调整126
4.4.11 并发标记清除之复位127
4.4.12 并发算法难点127
4.5 Full GC131
4.6 扩展阅读:标记栈溢出的各种处理方法131
4.6.1 重新标记法132
4.6.2 全局列表法132
4.6.3 逆指针法133
4.7 扩展阅读:元数据内存管理133
4.7.1 内存管理133
4.7.2 分配135
4.7.3 回收135
4.7.4 元数据管理的优化136

第5章 并行回收138
5.1 内存管理138
5.1.1 内存管理模型140
5.1.2 NUMA支持141
5.1.3 内存分配和GC触发流程143
5.2 Minor GC144
5.3 Full GC145
5.3.1 算法概述145
5.3.2 算法实现与演示148
5.4 扩展阅读:并行任务的负载均衡机制151
5.4.1 并行任务的窃取153
5.4.2 并行任务的终止156

第6章 垃圾优先160
6.1 内存管理概述162
6.1.1 分代下的分区管理163
6.1.2 新生代大小设计164
6.1.3 回收机制的设计166
6.2 引用集设计169
6.2.1 引用集存储169
6.2.2 引用集处理流程172
6.2.3 引用集写入174
6.3 新生代回收和混合回收176
6.3.1 回收过程中引用关系处理178
6.3.2 混合回收导致停顿时间不符合预期的处理方法178
6.3.3 NUMA-Aware支持180
6.3.4 云场景的支持180
6.3.5 并发标记和Minor GC、Mixed GC的交互181
6.4 并发标记183
6.4.1 SATB算法介绍183
6.4.2 增量并发标记算法186
6.5 Full GC188
6.5.1 串行实现算法188
6.5.2 并行实现算法189
6.6 扩展阅读:OpenJ9中的Balanced GC介绍190
6.6.1 内存管理的区别191
6.6.2 大对象设计的区别192
6.6.3 回收的区别193
6.6.4 并发标记的区别194
6.6.5 Full GC与Balanced GC的区别195

第7章 Shenandoah196
7.1 内存模型198
7.1.1 内存分配198
7.1.2 垃圾回收的触发198
7.2 并发标记设计200
7.3 并发转移设计201
7.3.1 引用不变性202
7.3.2 目标空间不变性203
7.3.3 源空间不变性205
7.4 垃圾回收实现206
7.4.1 垃圾回收策略206
7.4.2 垃圾回收模式207
7.4.3 正常回收算法208
7.4.4 优化模式垃圾回收209
7.4.5 垃圾回收的降级209
7.4.6 遍历回收算法210
7.4.7 垃圾回收触发的时机211
7.4.8 其他细节211
7.5 扩展阅读:OpenJ9中的实时垃圾回收器Metronome介绍214

第8章 ZGC219
8.1 内存管理222
8.1.1 内存管理模型222
8.1.2 高速分配设计224
8.2 回收设计226
8.2.1 算法概述227
8.2.2 视图状态229
8.2.3 读屏障232
8.2.4 高效的标记和转移设计234
8.2.5 垃圾回收触发的时机239
8.3 垃圾回收实现243
8.3.1 回收实现243
8.3.2 多线程高效地标记244
8.3.3 多线程高效地转移246
8.3.4 标记和重定位合并的优缺点246
8.4 ZGC新特性概览247
8.4.1 并发类卸载248
8.4.2 并发根扫描249
8.5 扩展阅读:分配预测模型的理论基础251

【第三部分】 JVM中垃圾回收相关参数介绍

第9章 GC通用参数259
9.1 GC生产参数259
9.1.1 GC选择相关参数259
9.1.2 GC工作线程相关参数261
9.1.3 内存设置相关参数263
9.1.4 停顿时间相关参数274
9.1.5 执行效率相关参数275
9.1.6 大页和NUMA参数284
9.1.7 GC日志相关参数285
9.1.8 其他参数285
9.2 GC实验参数288
9.2.1 GC选择相关参数288
9.2.2 引用处理相关参数288
9.2.3 GC任务均衡相关参数288
9.3 GC 诊断参数289
9.3.1 GC工作线程相关参数289
9.3.2 GC校验相关参数290
9.3.3 其他参数291
9.4 可动态调整的参数292
9.5 重要参数小结293

第10章 Parallel GC参数294
10.1 生产参数294
10.1.1 并行压缩相关参数294
10.1.2 并行复制相关参数296
10.2 重要参数小结296

第11章 CMS参数298
11.1 生产参数298
11.1.1 老生代分配相关参数298
11.1.2 老生代合并相关参数300
11.1.3 空闲列表管理相关参数300
11.1.4 老生代预清理相关参数303
11.1.5 老生代再标记相关参数306
11.1.6 Minor GC相关参数307
11.1.7 老生代GC触发控制相关参数308
11.1.8 老生代并行/并发控制相关参数310
11.1.9 其他参数311
11.2 诊断参数313
11.2.1 老生代碎片化相关参数313
11.2.2 Minor GC效率相关参数314
11.2.3 其他参数314
11.3 可动态调整的参数314
11.4 重要参数小结315 
 
第12章 G1参数316
12.1 生产参数316
12.1.1 并发标记相关参数316
12.1.2 引用集处理相关参数318
12.1.3 内存设置相关参数321
12.1.4 Minor GC相关参数321
12.1.5 GC触发控制相关参数322
12.1.6 混合回收相关参数322
12.2 实验参数323
12.2.1 内存设置相关参数323
12.2.2 Minor GC相关参数324
12.2.3 混合回收相关参数325
12.2.4 其他参数325
12.3 可动态调整的参数326
12.4 诊断参数326
12.5 重要参数小结327

第13章 Shenandoah参数328
13.1 生产参数328
13.1.1 垃圾回收模式相关参数328
13.1.2 垃圾回收策略相关参数329
13.2 实验参数329
13.2.1 内存设置相关参数329
13.2.2 垃圾回收策略及相关参数330
13.2.3 并发标记相关参数335
13.3 诊断参数336
13.4 重要参数小结338

第14章 ZGC参数339
14.1 生产参数339
14.2 诊断参数341
14.3 重要参数小结342

【第四部分】 ARM服务器上的GC挑战和优化

第15章 泰山服务器概述345
15.1 ARM架构346
15.1.1 ARM介绍346
15.1.2 ARMv8-A特性348
15.2 鲲鹏处理器353
15.2.1 芯片架构353
15.2.2 内存管理子系统355
15.2.3 流水线技术356
15.2.4 内存一致性357
15.3 泰山服务器358

第16章 AArch64平台上的GC挑战和优化363
16.1 内存序363
16.2 众核架构对性能的影响369
16.3 NUMA对性能的影响370
16.4 其他影响370
猜您喜欢

读书导航