《深入探索JVM垃圾回收:ARM服务器垃圾回收的挑战和优化》是由机械工业出版社出版的一本关于JVM垃圾回收方面的书籍,作者是彭成寒,主要介绍了关于JVM、ARM服务器方面的知识内容,目前在JVM垃圾回收类书籍综合评分为:7.8分。
书籍介绍
内容简介
本书介绍JVM和垃圾回收基础知识、垃圾回收原理和实现、JVM垃圾回收的参数、ARM服务器上的GC优化和调整,涉及部分垃圾回收的理论知识,但更关注工程实践。希望通过对实践的分析,让读者了解如何实现一款“令人满意”的垃圾回收器,即满足业务诉求,在停顿时间、吞吐量、资源消耗、实现复杂度、稳定性等方面进行了折中的垃圾回收器。
全书共分为四个部分:
第yi部分,介绍虚拟机执行的基础知识以及垃圾回收的相关知识;
第二部分,介绍JVM中实现的六种垃圾回收算法;
第三部分,介绍JVM提供了哪些参数用于控制垃圾回收的运行;
第四部分,以鲲鹏920为例介绍ARM服务器以及在ARM服务器下如何实现GC才能充分发挥硬件的性能。
作者简介
彭成寒 高级Java工程师,目前主要从事风控系统设计、算法建模、大数据处理等工作,有超过10年的Java和C++开发经验。
目录
- 前言
- 第一部分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.4Java代码执行过程简介13
- 1.4.1Java代码到字节码15
- 1.4.2JVM加载字节码16
- 1.4.3解释执行17
- 1.4.4编译执行22
- 1.5内存管理26
- 1.6线程管理27
- 1.7扩展阅读:JIT概述27
- 第2章JVM中垃圾回收相关的基本知识30
- 2.1GC算法分类30
- 2.2GC涉及的对象表示32
- 2.3GC算法概述34
- 2.3.1复制算法34
- 2.3.2标记清除算法36
- 2.3.3标记压缩算法37
- 2.3.4分代回收38
- 2.4GC的根40
- 2.4.1强根40
- 2.4.2Java引用引入的弱根42
- 2.4.3JVM优化实现引入的弱根43
- 2.4.4JVM中根的构成45
- 2.5安全点46
- 2.5.1解释线程进入安全点46
- 2.5.2编译线程进入安全点47
- 2.5.3本地线程进入安全点48
- 2.5.4JVM内部并发线程进入安全点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.5Full 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.2NUMA支持141
- 5.1.3内存分配和GC触发流程143
- 5.2Minor GC144
- 5.3Full 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.3NUMA-Aware支持180
- 6.3.4云场景的支持180
- 6.3.5并发标记和Minor GC、Mixed GC的交互181
- 6.4并发标记183
- 6.4.1SATB算法介绍183
- 6.4.2增量并发标记算法186
- 6.5Full 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.5Full 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.4ZGC新特性概览247
- 8.4.1并发类卸载248
- 8.4.2并发根扫描249
- 8.5扩展阅读:分配预测模型的理论基础251
- 第三部分JVM中垃圾回收相关参数介绍
- 第9章GC通用参数259
- 9.1GC生产参数259
- 9.1.1GC选择相关参数259
- 9.1.2GC工作线程相关参数261
- 9.1.3内存设置相关参数263
- 9.1.4停顿时间相关参数274
- 9.1.5执行效率相关参数275
- 9.1.6大页和NUMA参数284
- 9.1.7GC日志相关参数285
- 9.1.8其他参数285
- 9.2GC实验参数288
- 9.2.1GC选择相关参数288
- 9.2.2引用处理相关参数288
- 9.2.3GC任务均衡相关参数288
- 9.3GC 诊断参数289
- 9.3.1GC工作线程相关参数289
- 9.3.2GC校验相关参数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.6Minor GC相关参数307
- 11.1.7老生代GC触发控制相关参数308
- 11.1.8老生代并行/并发控制相关参数310
- 11.1.9其他参数311
- 11.2诊断参数313
- 11.2.1老生代碎片化相关参数313
- 11.2.2Minor 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.4Minor GC相关参数321
- 12.1.5GC触发控制相关参数322
- 12.1.6混合回收相关参数322
- 12.2实验参数323
- 12.2.1内存设置相关参数323
- 12.2.2Minor 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.1ARM架构346
- 15.1.1ARM介绍346
- 15.1.2ARMv8-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.3NUMA对性能的影响370
- 16.4其他影响370