深入探索JVM垃圾回收:ARM伺服器垃圾回收的挑戰和最佳化

《深入探索JVM垃圾回收:ARM伺服器垃圾回收的挑戰和最佳化》是2022年機械工業出版社出版的圖書。

基本介紹

  • 中文名:深入探索JVM垃圾回收:ARM伺服器垃圾回收的挑戰和最佳化
  • 出版時間:2022年8月1日
  • 出版社: 機械工業出版社
  • ISBN:9787111708773
內容簡介,圖書目錄,作者簡介,

內容簡介

本書介紹JVM和垃圾回收基礎知識、垃圾回收原理和實現、JVM垃圾回收的參數、ARM伺服器上的GC最佳化和調整,涉及部分垃圾回收的理論知識,但更關注工程實踐。希望通過對實踐的分析,讓讀者了解如何實現一款“令人滿意”的垃圾回收器,即滿足業務訴求,在停頓時間、吞吐量、資源消耗、實現複雜度、穩定性等方面進行了折中的垃圾回收器。
全書共分為四個部分:
第1部分,介紹虛擬機執行的基礎知識以及垃圾回收的相關知識;
第2部分,介紹JVM中實現的六種垃圾回收算法;
第3部分,介紹JVM提供了哪些參數用於控制垃圾回收的運行;
第4部分,以鯤鵬920為例介紹ARM伺服器以及在ARM伺服器下如何實現GC才能充分發揮硬體的性能。

圖書目錄

【第一部分】 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

作者簡介

彭成寒
虛擬機技術專家,目前主要從事JVM、V8和WebAssembly等虛擬機的研究和開發。他有超過15年的工作經驗,從事過套用軟體、大數據開發等工作。他是開源社區OpenEuler技術委員會委員,負責Compiler SIG;還是畢昇JDK的主要維護者和貢獻者,著有《JVM G1源碼分析和調優》《新一代垃圾回收器ZGC設計與實現》。

相關詞條

熱門詞條

聯絡我們