本書分為“算法篇”和“實(shí)現(xiàn)篇”兩大部分。算法篇介紹了標(biāo)記-清除算法、引用計(jì)數(shù)法、復(fù)制算法、標(biāo)記-壓縮算法、保守式GC、分代垃圾回收、增量式垃圾回收、RCImmix算法等幾種重要的算法;實(shí)現(xiàn)篇介紹了垃圾回收在Python、DalvikVM、Rubinius、V8等幾種語言處理程序中的具體實(shí)現(xiàn)。
中村成洋 ,Network Applied Communication Laboratory Ltd. 研究員。
因?yàn)榕既坏臋C(jī)會(huì)對GC產(chǎn)生濃厚興趣,其本人卻說不清楚為何喜歡GC,當(dāng)被人追問原因時(shí),總是回答“是緣分”,F(xiàn)在是CRuby的commiter,每天致力于GC的改善。
執(zhí)筆本書“實(shí)現(xiàn)篇”。
相川光 ,游戲開發(fā)者。
京都大學(xué)在學(xué)期間開始研究GC。熱愛GC但討厭打掃。除了GC之外還喜歡咖喱。
執(zhí)筆本書“算法篇”。
竹內(nèi)郁雄(審校) ,東京大學(xué)名譽(yù)教授。
熱愛對象,甚至?xí)o因?yàn)閎ug沒能得到重復(fù)利用而死去(釋放)的對象上供。
日本Lisp黑客,著有《LISP入門》(初めての人のためのLISP)。
序章
GC的定義 1
GC的好處 2
GC的歷史 3
為什么我們現(xiàn)在要學(xué)GC 4
讀者對象 6
本書中的符號 7
算法篇
第1章 學(xué)習(xí)GC之前
1.1 對象/頭/域 12
1.2 指針 14
1.3 mutator 15
1.4 堆 15
1.5 活動(dòng)對象/非活動(dòng)對象 16
1.6 分配 16
1.7 分塊 17
1.8 根 17
1.9 評價(jià)標(biāo)準(zhǔn) 19
第2章 GC標(biāo)記-清除算法
2.1 什么是GC標(biāo)記-清除算法 22
2.2 優(yōu)點(diǎn) 29
2.3 缺點(diǎn) 29
2.4 多個(gè)空閑鏈表 31
2.5 BiBOP法 33
2.6 位圖標(biāo)記 34
2.7 延遲清除法 37
第3章 引用計(jì)數(shù)法
3.1 引用計(jì)數(shù)的算法 40
3.2 優(yōu)點(diǎn) 44
3.3 缺點(diǎn) 44
3.4 延遲引用計(jì)數(shù)法 46
3.5 Sticky引用計(jì)數(shù)法 50
3.6 1位引用計(jì)數(shù)法 52
3.7 部分標(biāo)記-清除算法 55
第4章 GC復(fù)制算法
4.1 什么是GC復(fù)制算法 66
4.2 優(yōu)點(diǎn) 73
4.3 缺點(diǎn) 74
4.4 Cheney的GC復(fù)制算法 74
4.5 近似深度優(yōu)先搜索方法 78
4.6 多空間復(fù)制算法 83
第5章 GC標(biāo)記-壓縮算法
5.1 什么是GC標(biāo)記-壓縮算法 89
5.2 優(yōu)點(diǎn) 94
5.3 缺點(diǎn) 95
5.4 Two-Finger算法 95
5.5 表格算法 100
5.6 ImmixGC算法 106
第6章 保守式GC
6.1 什么是保守式GC 119
6.2 優(yōu)點(diǎn) 122
6.3 缺點(diǎn) 122
6.4 準(zhǔn)確式GC 123
6.5 間接引用 125
6.6 MostlyCopyingGC 127
6.7 黑名單 139
第7章 分代垃圾回收
7.1 什么是分代垃圾回收 142
7.2 Ungar的分代垃圾回收 143
7.3 優(yōu)點(diǎn) 153
7.4 缺點(diǎn) 154
7.5 記錄各代之間的引用的方法 154
7.6 多代垃圾回收 156
7.7 列車?yán)厥铡?57
第8章 增量式垃圾回收
8.1 什么是增量式垃圾回收 166
8.2 優(yōu)點(diǎn)和缺點(diǎn) 174
8.3 Steele的算法 174
8.4 湯淺的算法 176
8.5 比較各個(gè)寫入屏障 178
第9章 RC Immix算法
9.1 目的 180
9.2 合并型引用計(jì)數(shù)法 180
9.3 合并型引用計(jì)數(shù)法和Immix的融合 185
9.4 優(yōu)點(diǎn)和缺點(diǎn) 189
實(shí)現(xiàn)篇
第10章 Python的垃圾回收
10.1 本章前言 192
10.2 對象管理 194
10.3 Python的內(nèi)存分配器 196
10.4 第0層 通用的基礎(chǔ)分配器 197
10.5 第1層 Python低級內(nèi)存分配器 198
10.6 第2層 Python對象分配器 208
10.7 第3層 對象特有的分配器 231
10.8 引用計(jì)數(shù)法 234
10.9 引用的所有權(quán) 239
10.10 如何應(yīng)對有循環(huán)引用的垃圾對象 245
10.11 性能調(diào)整的建議 269
第11章 DalvikVM的垃圾回收
11.1 本章前言 271
11.2 重新學(xué)習(xí)mmap 275
11.3 DalvikVM的源代碼 279
11.4 DalvikVM的GC算法 282
11.5 對象管理 282
11.6 標(biāo)記階段 299
11.7 清除階段 322
11.8 Q&A 327
第12章 Rubinius的垃圾回收
12.1 本章前言 329
12.2 Rubinius的GC算法 333
12.3 對象管理 334
12.4 走向準(zhǔn)確式GC之路 343
12.5 GC復(fù)制算法 359
12.6 Q&A 375
第13章 V8的垃圾回收
13.1 本章前言 379
13.2 V8的GC算法 382
13.3 對象管理 382
13.4 通往準(zhǔn)確式GC之路(V8篇) 389
13.5 GC標(biāo)記-壓縮算法 398
13.6 標(biāo)記階段 400
13.7 壓縮階段 412
13.8 Q&A 431
附錄
附錄A 簡單語言入門:Python篇 432
附錄B 簡單語言入門:Java篇 435
附錄C 簡單語言入門:Ruby篇 436
附錄D 簡單語言入門:JavaScript篇 437
后記 439
參考文獻(xiàn) 441