深入Java虛擬機(jī) JVM G1GC的算法與實(shí)現(xiàn)
定 價(jià):59 元
- 作者:[日]中村成洋
- 出版時(shí)間:2021/1/1
- ISBN:9787115554529
- 出 版 社:人民郵電出版社
- 中圖法分類:TP312.8
- 頁碼:222
- 紙張:
- 版次:01
- 開本:大32開
本書深入Java虛擬機(jī)底層原理,對(duì)JVM內(nèi)存管理中的垃圾回收算法G1GC進(jìn)行了詳細(xì)解讀。全書分為“算法篇”和“實(shí)現(xiàn)篇”兩大部分:前一部分主要介紹G1GC的算法原理,內(nèi)容包括G1GC的并發(fā)標(biāo)記、轉(zhuǎn)移功能、軟實(shí)時(shí)性的實(shí)現(xiàn)和分代G1GC模式;后一部分聚焦算法篇中沒有詳細(xì)講解的實(shí)現(xiàn)部分,基于HotSpotVM源碼,講解對(duì)象管理功能、內(nèi)存分配器的機(jī)制、線程管理方法和G1GC的具體實(shí)現(xiàn)。
本書以圖配文,通俗易懂,既系統(tǒng)介紹了G1GC的基礎(chǔ)算法,又貼近現(xiàn)實(shí),剖析了實(shí)用JVM中的G1GC實(shí)現(xiàn),同時(shí)還包含了作者對(duì)G1GC的研究成果和獨(dú)到見解,是深入理解JVM和G1GC機(jī)制的佳作。
結(jié)合實(shí)用JVM,圖解Java垃圾回收機(jī)制的關(guān)鍵技術(shù)!
·90張圖表+33段代碼,輕松理解G1GC算法原理
·HotSpotVM源碼剖析,深入探討G1GC具體實(shí)現(xiàn)
1.深入Java虛擬機(jī)底層原理,詳細(xì)解讀經(jīng)典GC算法;
2.理論結(jié)合實(shí)際,基于HotSpotVM源碼探討具體實(shí)現(xiàn);
3.圖文并茂、深入淺出,輔以大量插圖和代碼細(xì)致講解。
中村成洋(作者)
生于1985年。日本網(wǎng)絡(luò)應(yīng)用通信研究所研究員。因?yàn)榕既坏臋C(jī)會(huì)對(duì)GC產(chǎn)生濃厚興趣,本人卻說不清為何喜歡GC,被人追問原因時(shí),總是回答“是緣分”,F(xiàn)在是CRuby的committer,每天致力于GC的改善。著有《垃圾回收的算法與實(shí)現(xiàn)》。
吳炎昌(譯者)
畢業(yè)于西北工業(yè)大學(xué)軟件工程專業(yè),曾供職于多家日本軟件公司,從事系統(tǒng)開發(fā)工作。2015年回國后加入美團(tuán)點(diǎn)評(píng),現(xiàn)任系統(tǒng)研發(fā)工程師。愛好旅行、電影和品嘗各種美食,有一位志趣相投的伴侶。
算法篇
第 1章 G1GC是什么
1.1 G1GC和實(shí)時(shí)性 2
1.2 堆結(jié)構(gòu) 5
1.3 執(zhí)行過程 5
1.4 并發(fā)標(biāo)記和轉(zhuǎn)移 7
第 2章 并發(fā)標(biāo)記
2.1 什么是并發(fā)標(biāo)記 8
2.2 標(biāo)記位圖 9
2.3 執(zhí)行步驟 10
2.4 步驟①——初始標(biāo)記階段 10
2.5 步驟②——并發(fā)標(biāo)記階段 12
2.6 步驟③——最終標(biāo)記階段 18
2.7 步驟④——存活對(duì)象計(jì)數(shù) 19
2.8 步驟⑤——收尾工作 21
2.9 總結(jié) 22
第3章 轉(zhuǎn)移
3.1 什么是轉(zhuǎn)移 25
3.2 轉(zhuǎn)移專用記憶集合 26
3.3 轉(zhuǎn)移專用寫屏障 28
3.4 轉(zhuǎn)移專用記憶集合維護(hù)線程 31
3.5 熱卡片 32
3.6 執(zhí)行步驟 32
3.7 步驟①——選擇回收集合 33
3.8 步驟②——根轉(zhuǎn)移 34
3.9 步驟③——轉(zhuǎn)移 39
3.10 標(biāo)記信息的作用 39
3.11 總結(jié) 40
第4章 軟實(shí)時(shí)性
4.1 用戶的需求 41
4.2 預(yù)測(cè)轉(zhuǎn)移時(shí)間 42
4.3 預(yù)測(cè)可信度 43
4.4 GC暫停處理的調(diào)度 44
4.5 并發(fā)標(biāo)記中的暫停處理 46
第5章 分代G1GC模式
5.1 不同點(diǎn) 47
5.2 新生代區(qū)域 48
5.3 分代對(duì)象轉(zhuǎn)移 49
5.4 執(zhí)行過程簡述 49
5.5 分代選擇回收集合 51
5.6 設(shè)置最大新生代區(qū)域數(shù) 51
5.7 GC的切換 52
5.8 GC執(zhí)行的時(shí)機(jī) 52
第6章 算法篇總結(jié)
6.1 關(guān)系圖 53
6.2 優(yōu)點(diǎn) 54
6.3 缺點(diǎn) 54
6.4 結(jié)束語 55
實(shí)現(xiàn)篇
第7章 準(zhǔn)備工作
7.1 什么是HotSpotVM 58
7.2 什么是OpenJDK 58
7.3 獲取源碼 59
7.4 代碼結(jié)構(gòu) 60
7.5 兩個(gè)特殊類 61
7.6 適用于各種操作系統(tǒng)的接口 63
第8章 對(duì)象管理功能
8.1 對(duì)象管理功能的接口 64
8.2 對(duì)象管理功能的全貌 65
8.3 CollectedHeap類 66
8.4 CollectorPolicy類 67
8.5 各個(gè)GC類 68
第9章 堆結(jié)構(gòu)
9.1 VM堆 70
9.2 G1GC堆 72
9.3 常駐空間 75
第 10章 分配器
10.1 內(nèi)存分配的流程 76
10.2 VM堆的申請(qǐng) 77
10.3 VM堆的分配 79
10.4 對(duì)象的分配 86
10.5 TLAB 90
第 11章 對(duì)象結(jié)構(gòu)
11.1 oopDesc類 92
11.2 klassOopDesc類 93
11.3 Klass類 94
11.4 類之間的關(guān)系 95
11.5 不要在oopDesc類中定義虛函數(shù) 96
11.6 對(duì)象頭 97
第 12章 HotSpotVM的線程管理
12.1 線程操作的抽象化 103
12.2 Thread類 103
12.3 線程的生命周期 104
12.4 Windows線程的創(chuàng)建 107
12.5 Windows線程的處理開始 110
12.6 Linux線程的創(chuàng)建 113
12.7 開始Linux線程的處理 117
第 13章 線程的互斥處理
13.1 什么是互斥處理 119
13.2 互斥量 119
13.3 監(jiān)視器 120
13.4 監(jiān)視器的實(shí)現(xiàn) 122
13.5 Monitor類 127
13.6 Mutex類 129
13.7 MutexLocker類 130
第 14章 GC線程(并行篇)
14.1 并行執(zhí)行的流程 132
14.2 AbstractWorkGang類 136
14.3 AbstractGangTask類 137
14.4 GangWorker類 137
14.5 并行GC的執(zhí)行示例 138
第 15章 GC線程(并發(fā)篇)
15.1 ConcurrentGCThread類 146
15.2 SuspendibleThreadSet類 147
15.3 安全點(diǎn) 150
15.4 VM線程 152
第 16章 并發(fā)標(biāo)記
16.1 并發(fā)標(biāo)記的全貌 155
16.2 步驟①——初始標(biāo)記階段 160
16.3 步驟②——并發(fā)標(biāo)記階段 168
16.4 步驟③——最終標(biāo)記階段 170
16.5 步驟④——存活對(duì)象計(jì)數(shù) 172
16.6 步驟⑤——收尾工作 172
第 17章 轉(zhuǎn)移
17.1 轉(zhuǎn)移的全貌 174
17.2 步驟①——選擇回收集合 178
17.3 步驟②——根轉(zhuǎn)移 181
17.4 步驟③——轉(zhuǎn)移 185
第 18章 預(yù)測(cè)與調(diào)度
18.1 根據(jù)歷史記錄進(jìn)行預(yù)測(cè) 187
18.2 并發(fā)標(biāo)記的調(diào)度 194
18.3 轉(zhuǎn)移的調(diào)度 195
第 19章 準(zhǔn)確式GC的實(shí)現(xiàn)
19.1 棧圖 197
19.2 句柄區(qū)域與句柄標(biāo)記 209
第 20章 寫屏障的性能開銷
20.1 運(yùn)行時(shí)切換GC算法 212
20.2 解釋器的寫屏障 214
20.3 JIT編譯器的寫屏障 216
后記 220
參考文獻(xiàn) 223