垃圾迴收算法手冊:自動內存管理的藝術

垃圾迴收算法手冊:自動內存管理的藝術 下載 mobi epub pdf 電子書 2025

[英] 理查德·瓊斯 著,王雅光 譯
圖書標籤:
  • 垃圾迴收
  • 內存管理
  • 自動內存管理
  • C++
  • Java
  • Python
  • Go
  • 性能優化
  • 算法
  • 編程語言
  • 計算機科學
想要找書就要到 圖書大百科
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 機械工業齣版社
ISBN:9787111528821
版次:1
商品編碼:11887586
品牌:機工齣版
包裝:平裝
叢書名: 計算機科學叢書
開本:16開
齣版時間:2016-03-01
用紙:膠版紙
頁數:437

具體描述

編輯推薦

在自動內存管理領域,Richard Jones於1996年齣版的《Garbage Collection: Algorithms for Automatic Dynamic Memory Management》可謂是一部裏程碑式的作品。接近20年過去瞭,垃圾迴收技術得到瞭非常大的發展,因此有必要將該領域當前*先進的技術呈現給讀者。本書匯集瞭自動內存管理研究者和開發者們在過去50年間的豐富經驗,在本書中,作者在一個統一的易於接受的框架內比較瞭當下重要的迴收策略以及先進的迴收技術。
本書從近年來硬件與軟件的發展給垃圾迴收所帶來的新挑戰齣發,探討瞭這些挑戰給高性能垃圾迴收器的設計者與實現者所帶來的影響。在簡單的傳統迴收算法之外,本書還涵蓋瞭並行垃圾迴收、增量式垃圾迴收、並發垃圾迴收以及實時垃圾迴收。書中配備瞭豐富的僞代碼與插圖,以描述各種算法與概念。

本書特色
為1996年《Garbage Collection: Algorithms for Automatic Dynamic Memory Management》一書提供瞭完整的、*新的、**的續作。
*麵講解並行垃圾迴收算法、並發垃圾迴收算法以及實時垃圾迴收算法。
深入剖析某些垃圾迴收領域的棘手問題,包括與運行時係統的接口。
提供在綫數據庫支持,包含超過2500條垃圾迴收相關文獻。

內容簡介

幾乎所有的現代編程語言都采用瞭垃圾迴收機製,因此深入瞭解此方麵內容對於所有開發者而言都大有裨益。對於不同垃圾迴收器的工作方式,以及當前垃圾迴收器所麵臨的各種問題,這本手冊都提供瞭專業的解答。掌握這方麵的知識之後,在麵對多種不同的垃圾迴收器以及各種調節選項時,相信開發者能夠更有把握。
本書共19章,第1章探討為什麼需要自動內存管理,並簡要介紹對不同垃圾迴收策略進行比較的方法;第2~5章詳細描述4種經典的垃圾迴收算法,包括標記-清掃算法、標記-整理算法、復製式迴收算法和引用計數算法;第6章深入比較第2~5章所介紹的迴收策略與算法;第7章介紹多種不同的內存分配技術,並進一步探究自動垃圾迴收與顯示內存管理這兩種場景下分配策略的不同之處;第8章討論為何需要將堆劃分為多個不同的空間,以及如何管理這些空間;第9章介紹分代垃圾迴收;第10章介紹大對象的管理策略以及其他分區策略;第11章介紹運行時接口,包括指針查找、能夠安*發起垃圾迴收的代碼位置、讀寫屏障等;第12章討論特定語言相關內容,包括終結機製和弱引用;第13章探討現代硬件係統給垃圾迴收器的實現者所帶來的新機遇與挑戰,同時介紹同步、前進、結束、一緻等問題的相關算法;第14章介紹如何在掛起所有應用程序綫程的前提下使用多個綫程進行垃圾迴收;第15~18章介紹多種不同種類的並發迴收器;第19章探討垃圾迴收在硬實時係統中的應用。

作者簡介

理查德·瓊斯
(Richard Jones)
坎特伯雷-肯特大學計算機學院教授。1998年聯閤創立瞭國際存儲管理研討會,並擔任*屆會議主席。他發錶瞭多篇關於垃圾迴收技術、堆可視化技術、電子齣版技術相關的論文,多次擔任主要國際會議計劃委員會的常務委員,同時還是《Software Practice and Experience》雜誌的編輯委員會成員。因在動態存儲管理領域的研究和學術成績,他於2005年被聘任為格拉斯哥大學名譽研究員,2006年被計算機協會評為傑齣科學傢。

安東尼·霍思金
(Antony Hosking)
普渡大學西拉法葉分校計算機學院副教授。他的主要研究方嚮是編程語言的設計與實現,特彆是數據庫與持久化編程語言、麵嚮對象數據庫係統、動態存儲管理、編譯器優化以及編程語言和應用的架構支持。

艾略特·莫斯
(Eliot Moss)
馬薩諸塞大學阿默斯特分校計算機科學學院教授。他的主要研究方嚮為編程語言及其實現,而且早在1978年就構建齣垃圾迴收器。除瞭自動存儲管理領域之外,他在持久編程語言、虛擬機實現、事務性編程與事務內存方麵也擁有較高的知名度。他曾與IBM研究員一起推動Jikes RVM Java虛擬機的學術研究許可,並*終促使其成為開源項目。

目錄

The Garbage Collection Handbook: the Art of Automatic Memory Management
齣版者的話
譯者序
前言
作者簡介
第1章 引言 1
1.1 顯式內存釋放 1
1.2?自動動態內存管理 3
1.3 垃圾迴收算法之間的比較 5
1.3.1 安全性 5
1.3.2 吞吐量 5
1.3.3 完整性與及時性 5
1.3.4 停頓時間 6
1.3.5 空間開銷 7
1.3.6 針對特定語言的優化 7
1.3.7 可擴展性與可移植性 8
1.4 性能上的劣勢 8
1.5 實驗方法 8
1.6 術語和符號 10
1.6.1 堆 10
1.6.2 賦值器與迴收器 11
1.6.3 賦值器根 11
1.6.4 引用、域和地址 11
1.6.5 存活性、正確性以及可達性 12
1.6.6 僞代碼 12
1.6.7 分配器 13
1.6.8 賦值器的讀寫操作 13
1.6.9 原子操作 13
1.6.10 集閤、多集閤、序列以及元組 14
第2章 標記–清掃迴收 15
2.1 標記–清掃算法 16
2.2 三色抽象 18
2.3 改進的標記–清掃算法 18
2.4 位圖標記 19
2.5 懶惰清掃 21
2.6 標記過程中的高速緩存不命中問題 24
2.7 需要考慮的問題 25
2.7.1 賦值器開銷 25
2.7.2 吞吐量 26
2.7.3 空間利用率 26
2.7.4 移動,還是不移動 26
第3章 標記–整理迴收 28
3.1 雙指針整理算法 29
3.2 Lisp 2算法 30
3.3 引綫整理算法 32
3.4 單次遍曆算法 34
3.5 需要考慮的問題 36
3.5.1 整理的必要性 36
3.5.2 整理的吞吐量開銷 36
3.5.3 長壽數據 36
3.5.4 局部性 37
3.5.5 標記–整理算法的局限性 37
第4章 復製式迴收 38
4.1 半區復製迴收 38
4.1.1 工作列錶的實現 39
4.1.2 示例 40
4.2 遍曆順序與局部性 42
4.3 需要考慮的問題 46
4.3.1 分配 46
4.3.2 空間與局部性 47
4.3.3 移動對象 48
第5章 引用計數 49
5.1 引用計數算法的優缺點 50
5.2 提升效率 51
5.3 延遲引用計數 52
5.4 閤並引用計數 54
5.5 環狀引用計數 57
5.6 受限域引用計數 61
5.7 需要考慮的問題 62
5.7.1 應用場景 62
5.7.2 高級的解決方案 62
第6章 垃圾迴收器的比較 64
6.1 吞吐量 64
6.2 停頓時間 65
6.3 內存空間 65
6.4 迴收器的實現 66
6.5 自適應係統 66
6.6 統一垃圾迴收理論 67
6.6.1 垃圾迴收的抽象 67
6.6.2 追蹤式垃圾迴收 67
6.6.3 引用計數垃圾迴收 69
第7章 內存分配 72
7.1 順序分配 72
7.2 空閑鏈錶分配 73
7.2.1 首次適應分配 73
7.2.2 循環首次適應分配 75
7.2.3 最佳適應分配 75
7.2.4 空閑鏈錶分配的加速 76
7.3 內存碎片化 77
7.4 分區適應分配 78
7.4.1 內存碎片 79
7.4.2 空間大小分級的填充 79
7.5 分區適應分配與簡單空閑鏈錶分配的結閤 81
7.6 其他需要考慮的問題 81
7.6.1 字節對齊 81
7.6.2 空間大小限製 82
7.6.3 邊界標簽 82
7.6.4 堆可解析性 82
7.6.5 局部性 84
7.6.6 拓展塊保護 84
7.6.7 跨越映射 85
7.7 並發係統中的內存分配 85
7.8 需要考慮的問題 86
第8章 堆內存的劃分 87
8.1 術語 87
8.2 為何要進行分區 87
8.2.1 根據移動性進行分區 87
8.2.2 根據對象大小進行分區 88
8.2.3 為空間進行分區 88
8.2.4 根據類彆進行分區 89
8.2.5 為效益進行分區 89
8.2.6 為縮短停頓時間進行分區 90
8.2.7 為局部性進行分區 90
8.2.8 根據綫程進行分區 90
8.2.9 根據可用性進行分區 91
8.2.10 根據易變性進行分區 91
8.3 如何進行分區 92
8.4 何時進行分區 93
第9章 分代垃圾迴收 95
9.1 示例 95
9.2 時間測量 96
9.3 分代假說 97
9.4 分代與堆布局 97
9.5 多分代 98
9.6 年齡記錄 99
9.6.1 集體提升 99
9.6.2 衰老半區 100
9.6.3 存活對象空間與柔性提升 101
9.7 對程序行為的適應 103
9.7.1 Appel式垃圾迴收 103
9.7.2 基於反饋的對象提升 104
9.8 分代間指針 105
9.8.1 記憶集 106
9.8.2 指針方嚮 106
9.9 空間管理 107
9.10 中年優先迴收 108
9.11 帶式迴收框架 110
9.12 啓發式方法在分代垃圾迴收中的應用 112
9.13 需要考慮的問題 113
9.14 抽象分代垃圾迴收 115
第10章 其他分區策略 117
10.1 大對象空間 117
10.1.1 轉輪迴收器 118
10.1.2 在操作係統支持下的對象移動 119
10.1.3 不包含指針的對象 119
10.2 基於對象拓撲結構的迴收器 119
10.2.1 成熟對象空間的迴收 120
10.2.2 基於對象相關性的迴收 122
10.2.3 綫程本地迴收 123
10.2.4 棧上分配 126
10.2.5 區域推斷 127
10.3 混閤標記–清掃、復製式迴收器 128
10.3.1 Garbage-First迴收 129
10.3.2 Immix迴收以及其他迴收 130
10.3.3 受限內存空間中的復製式迴收 133
10.4 書簽迴收器 134
10.5 超引用計數迴收器 135
10.6 需要考慮的問題 136
第11章 運行時接口 138
11.1 對象分配接口 138
11.1.1 分配過程的加速 141
11.1.2 清零 141
11.2 指針查找 142
11.2.1 保守式指針查找 143
11.2.2 使用帶標簽值進行精確指針查找 144
11.2.3 對象中的精確指針查找 145
11.2.4 全局根中的精確指針查找 147
11.2.5 棧與寄存器中的精確指針查找 147
11.2.6 代碼中的精確指針查找 157
11.2.7 內部指針的處理 158
11.2.8 派生指針的處理 159
11.3 對象錶 159
11.4 來自外部代碼的引用 160
11.5 棧屏障 162
11.6 安全迴收點以及賦值器的掛起 163
11.7 針對代碼的迴收 165
11.8 讀寫屏障 166
11.8.1 讀寫屏障的設計工程學 167
11.8.2 寫屏障的精度 167
11.8.3 哈希錶 169
11.8.4 順序存儲緩衝區 170
11.8.5 溢齣處理 172
11.8.6 卡錶 172
11.8.7 跨越映射 174
11.8.8 匯總卡 176
11.8.9 硬件與虛擬內存技術 176
11.8.10 寫屏障相關技術小結 177
11.8.11 內存塊鏈錶 178
11.9 地址空間管理 179
11.10 虛擬內存頁保護策略的應用 180
11.10.1 二次映射 180
11.10.2 禁止訪問頁的應用 181
11.11 堆大小的選擇 183
11.12 需要考慮的問題 185
第12章 特定語言相關內容 188
12.1 終結 188
12.1.1 何時調用終結方法 189
12.1.2 終結方法應由哪個綫程調用 190
12.1.3 是否允許終結方法彼此之間的並發 190
12.1.4 是否允許終結方法訪問不可達對象 190
12.1.5 何時迴收已終結對象 191
12.1.6 終結方法執行齣錯時應當如何處理 191
12.1.7 終結操作是否需要遵從某種順序 191
12.1.8 終結過程中的競爭問題 192
12.1.9 終結方法與鎖 193
12.1.10 特定語言的終結機製 193
12.1.11 進一步的研究 195
12.2 弱引用 195
12.2.1 其他動因 196
12.2.2 對不同強度指針的支持 196
12.2.3 使用虛對象控製終結順序 199
12.2.4 弱指針置空過程的競爭問題 199
12.2.5 弱指針置空時的通知 199
12.2.6 其他語言中的弱指針 200
12.3 需要考慮的問題 201
第13章 並發算法預備知識 202
13.1 硬件 202
13.1.1 處理器與綫程 202
13.1.2 處理器與內存之間的互聯 203
13.1.3 內存 203
13.1.4 高速緩存 204
13.1.5 高速緩存一緻性 204
13.1.6 高速緩存一緻性對性能的影響示例:自鏇鎖 205
13.2 硬件內存一緻性 207
13.2.1 內存屏障與先於關係 208
13.2.2 內存一緻性模型 209
13.3 硬件原語 209
13.3.1 比較並交換 210
13.3.2 加載鏈接/條件存儲 211
13.3.3 原子算術原語 212
13.3.4 檢測–檢測並設置 213
13.3.5 更加強大的原語 213
13.3.6 原子操作原語的開銷 214
13.4 前進保障 215
13.5 並發算法的符號記法 217
13.6 互斥 218
13.7 工作共享與結束檢測 219
13.8 並發數據結構 224
13.8.1 並發棧 226
13.8.2 基於單鏈錶的並發隊列 228
13.8.3 基於數組的並發隊列 230
13.8.4 支持工作竊取的並發雙端隊列 235
13.9 事務內存 237
13.9.1 何謂事務內存 237
13.9.2 使用事務內存助力垃圾迴收器的實現 239
13.9.3 垃圾迴收機製對事務內存的支持 240
13.10 需要考慮的問題 241
第14章 並行垃圾迴收 242
14.1 是否有足夠多的工作可以並行 243
14.2 負載均衡 243
14.3 同步 245
14.4 並行迴收的分類 245
14.5 並行標記 246
14.6 並行復製 254
14.6.1 以處理器為中心的並行復製 254
14.6.2 以內存為中心的並行復製技術 258
14.7 並行清掃 263
14.8 並行整理 264
14.9 需要考慮的問題 267
14.9.1 術語 267
14.9.2 並行迴收是否值得 267
14.9.3 負載均衡策略 267
14.9.4 並行追蹤 268
14.9.5 低級同步 269
14.9.6 並行清掃與並行整理 270
14.9.7 結束檢測 270
第15章 並發垃圾迴收 271
15.1 並發迴收的正確性 272
15.1.1 三色抽象迴顧 273
15.1.2 對象丟失問題 274
15.1.3 強三色不變式與弱三色不變式 275
15.1.4 迴收精度 276
15.1.5 賦值器顔色 276
15.1.6 新分配對象的顔色 276
15.1.7 基於增量更新的解決方案 277
15.1.8 基於起始快照的解決方案 277
15.2 並發迴收的相關屏障技術 277
15.2.1 灰色賦值器屏障技術 278
15.2.2 黑色賦值器屏障技術 279
15.2.3 屏障技術的完整性 280
15.2.4 並發寫屏障的實現機製 281
15.2.5 單級卡錶 282
15.2.6 兩級卡錶 282
15.2.7 減少迴收工作量的相關策略 282
15.3 需要考慮的問題 283
第16章 並發標記–清掃算法 285
16.1 初始化 285
16.2 結束 287
16.3 分配 287
16.4 標記過程與清掃過程的並發 288
16.5 即時標記 289
16.5.1 即時迴收的寫屏障 290
16.5.2 Doligez-Leroy-Gonthier迴收器 290
16.5.3 Doligez-Leroy-Gonthier迴收器在Java中的應用 292
16.5.4 滑動視圖 292
16.6 抽象並發迴收框架 293
16.6.1 迴收波麵 294
16.6.2 增加追蹤源頭 295
16.6.3 賦值器屏障 295
16.6.4 精度 295
16.6.5 抽象並發迴收器的實例化 296
16.7 需要考慮的問題 296
第17章 並發復製、並發整理算法 298
17.1 主體並發復製:Baker算法 298
17.2 Brooks間接屏障 301
17.3 自刪除讀屏障 301
17.4 副本復製 302
17.5 多版本復製 303
17.6 Sapphire迴收器 306
17.6.1 迴收的各個階段 306
17.6.2 相鄰階段的閤並 311
17.6.3 Volatile域 312
17.7 並發整理算法 312
17.7.1 Compressor迴收器 312
17.7.2 Pauseless迴收器 315
17.8 需要考慮的問題 321
第18章 並發引用計數算法 322
18.1 簡單引用計數算法迴顧 322
18.2 緩衝引用計數 324
18.3 並發環境下的環狀引用計數處理 326
18.4 堆快照的獲取 326
18.5 滑動視圖引用計數 328
18.5.1 麵嚮年齡的迴收 328
18.5.2 算法實現 328
18.5.3 基於滑動視圖的環狀垃圾迴收 331
18.5.4 內存一緻性 331
18.6 需要考慮的問題 332
第19章 實時垃圾迴收 333
19.1 實時係統 333
19.2 實時迴收的調度 334
19.3 基於工作的實時迴收 335
19.3.1 並行、並發副本迴收 335
19.3.2 非均勻工作負載的影響 341
19.4 基於間隙的實時迴收 342
19.4.1 迴收工作的調度 346
19.4.2 執行開銷 346
19.4.3 開發者需要提供的信息 347
19.5 基於時間的實時迴收:Metronome迴收器 347
19.5.1 賦值器使用率 348
19.5.2 對可預測性的支持 349
19.5.3 Metronome迴收器的分析 351
19.5.4 魯棒性 355
19.6 多種調度策略的結閤:“稅收與開支” 355
19.6.1 “稅收與開支”調度策略 356
19.6.2 “稅收與開支”調度策略的實現基礎 357
19.7 內存碎片控製 359
19.7.1 Metronome迴收器中的增量整理 360
19.7.2 單處理器上的增量副本復製 361
19.7.3 Stopless迴收器:無鎖垃圾迴收 361
19.7.4 Staccato迴收器:在賦值器無等待前進保障條件下的盡力整理 363
19.7.5 Chicken迴收器:在賦值器無等待前進保障條件下的盡力整理(x86平颱) 365
19.7.6 Clover迴收器:賦值器樂觀無鎖前進保障下的可靠整理 366
19.7.7 Stopless迴收器、Chicken迴收器、Clover迴收器之間的比較 367
19.7.8 離散分配 368
19.8 需要考慮的問題 370
術語錶 372
參考文獻 383
索引 413

前言/序言

  The Garbage Collection Handbook: the Art of Automatic Memory Management1960年,McCarthy和Collins發錶瞭第一篇有關自動動態內存管理(即垃圾迴收)的論文。彈指一揮間,50多年後的今天,本書也已截稿。垃圾迴收機製誕生於Lisp程序語言,無巧不成書,Lisp語言誕生於1958年,在其40周年之際,第一屆國際內存管理研討會(International Symposium on Memory Management)於1998年10月舉辦,而本書開始寫作的時間也恰逢此次會議召開10周年。McCathy[1978]迴憶他在麻省理工學院工業聯絡研討會上第一次現場演示Lisp語言時的情形,他們本想給觀眾留下良好的第一印象,但不幸的是,IBM 704在演示的中途就耗盡瞭全部的32KB內存空間,電傳打字機以每秒十個字符的速度輸齣THE GARBAGE COLLECTOR HAS BEEN CALLED. SOME INTERESTING STATISTICS ARE AS FOLLOWS:
  以及其他一些更加冗長的錯誤信息,這一問題幾乎占據瞭當時的整個演示時間,於是McCarthy的項目小組不得不省略刷新Lisp核心映像的相關內容,並在觀眾的笑聲中無奈地結束演示。50多年後的今天,垃圾迴收早已不再是一個笑話,反而已經成為現代編程語言實現的關鍵組成部分之一。對於所有誕生於1990年之後且得到廣泛應用的編程語言,Visual Basic(齣現於1991年)是其中唯一一個沒有采用自動內存管理的語言,但是其現代版本VB.NET(齣現於2002年)卻依賴於具備垃圾迴收能力的微軟公共語言運行時(Microsoft common language runtime)。
  垃圾迴收給軟件開發帶來的收益不勝枚舉。它可以消除開發過程中的幾大類錯誤,例如嘗試對懸掛指針(即指嚮已經迴收或錯誤甚至被重新分配齣去的內存)進行解引用,或者對已經釋放的內存進行二次釋放。盡管其不能保證完全消除內存泄漏問題,但也能大幅減少該問題的齣現幾率,還能夠大幅簡化並發數據結構的構建和使用[Herlihy and Shavit, 2008]。綜上所述,開發者能夠基於垃圾迴收所提供的抽象能力進行更好的軟件工程實踐。它簡化瞭用戶接口,使得代碼更加容易理解和維護,進而更加可靠。由於用戶接口不再需要關注內存管理,所以提升瞭代碼的可復用性。
  在過去的數年中,內存管理技術在軟件和硬件方麵都取得瞭長足進步。1996年,典型的Intel 奔騰處理器的時鍾速度隻有120MHz,就連基於Digital的Alpha芯片的高端工作站主頻也隻有266MHz。而在今天,主頻達到3GHz以上的高端處理器以及多核芯片已經非常普遍,主存空間也幾乎取得瞭1000倍的增長,普通颱式計算機的內存大小已經從最初的幾兆字節擴展到瞭4GB。盡管如此,DRAM內存的性能提升速度依然趕不上處理器的主頻增長速度。我們曾在Garbage Collection: Algorithms for Automatic Dynamic Memory Management中指齣,“垃圾迴收是能夠解決所有內存管理問題的靈丹妙藥”,並特彆指齣“垃圾迴收機製尚無法應用於硬實時係統(即係統必須在給定時限內對事件做齣響應)”。但時至今日,硬實時垃圾迴收器已經走齣實驗室並進入到商業應用領域。盡管現代垃圾迴收器已經解決瞭大多數內存管理問題,但新硬件、新環境以及新應用的齣現仍會在內存管理領域不斷拋齣新的問題與挑戰。
  緻讀者本書試圖將過去50多年間學者和開發者們在自動內存管理領域所積纍的豐富經驗加以總結。所涉文獻數量龐大,在寫作期間我們的在綫資源庫收集瞭多達2500條記錄。在描述最重要的實現策略以及代錶最先進水平的實現技術時,我們盡量在一個統一的、易於接受的框架內進行討論與比較。我們特彆注意使用統一的風格和術語來介紹相關的算法與概念,同時輔以僞代碼和插圖來描述具體細節。對於關乎性能的部分,我們特彆注意對底層細節的描述,例如同步操作原語的選擇、硬件組件(如高速緩存)對算法設計的影響。
  在過去的10年間,硬件和軟件設施的發展給垃圾迴收領域帶來瞭許多新的挑戰。處理器和內存之間的性能差距總體在不斷擴大。處理器時鍾速度得到大幅增長,單個芯片上集成的處理器核心數量越來越多,使用多處理器的模塊也越來越普遍。本書重點關注瞭這些變化對高性能垃圾迴收器的設計與實現所造成的影響。由於高速緩存對性能的影響至關重要,所以垃圾迴收算法必須考慮到局部性問題。越來越多的應用程序已經多綫程化,且運行在多核處理器之上,因而我們應當避免內存管理器成為性能瓶頸。另外,垃圾迴收器的設計應當充分利用硬件的並行能力。在Jones[1996]中,我們完全沒有考慮如何使用多綫程進行並行迴收,隻用一章的篇幅來介紹增量迴收與並發迴收,這在當時的書中顯得格外引人注目。
  本書自始至終都密切關注現代硬件所帶來的機遇與限製,對局部性問題的考量將貫穿全書。我們默認應用程序可能是多綫程的。盡管本書涵蓋瞭很多更加簡單、更加傳統的算法,但我們還是花瞭全書近一半的篇幅來介紹並行迴收、增量迴收、並發迴收以及實時迴收。
  我們希望本書能夠幫助到對編程語言實現感興趣的研究生、研究人員和開發人員。對於選修瞭編程語言、編譯器構建、軟件工程或操作係統方麵高級課程的本科生而言,本書也會有所幫助。此外,我們希望專業開發人員能夠通過本書更加深入地瞭解垃圾迴收麵臨的相關問題、不同迴收器的工作模式,我們相信,與具體的專業知識相結閤,開發人員在麵對多種垃圾迴收方法時,能夠更好地進行迴收器的選型與配置。由於幾乎所有的現代編程語言都提供瞭垃圾迴收機製,所以全麵瞭解這一課題對所有開發者來說都是不可或缺的。
  本書結構本書第1章以探討為什麼需要自動內存管理作為開篇,簡要介紹瞭對不同垃圾迴收策略進行比較的方法。該章結尾介紹瞭貫穿全書的抽象記法與僞代碼描述方式。
  接下來的4章詳細描述瞭4種經典的垃圾迴收算法,分彆是標記–清掃算法、標記–整理算法、復製式迴收算法以及引用計數算法。本書對這些迴收算法進行瞭深入的研究,並特彆關注瞭其在現代硬件設施上的實現。如果讀者需要一些更加基礎的介紹,可以參閱我們先前的一本書Garbage Collection: Algorithms for Automatic Dynamic Memory Management(Richard Jones and Rafael Lins, Wiley, 1996)。第6章深入比較瞭第2~5章所介紹的迴收策略與算法,評估瞭它們各自的優缺點以及在不同情況下的適用性。
  內存迴收策略同樣依賴於內存分配策略。第7章介紹瞭多種不同的內存分配技術,並進一步探究瞭自動垃圾迴收與顯式內存管理這兩種場景下分配策略的不同之處。
  前7章假定所有堆中的對象均采用相同的管理策略,但根據許多因素可知這並非一種良好的設計策略。第8章討論瞭為何需要將堆劃分為多個不同的空間,以及如何管理這些空間;第9章介紹瞭最成功的對象管理策略之一:分代垃圾迴收;第10章介紹瞭大對象的管理策略以及其他分區策略。
  在構建垃圾迴收器的過程中,與運行時係統其他部分的對接是最復雜的內容之一。因此第11章用瞭一整章的篇幅來介紹運行時接口,包括指針查找、能夠安全發起垃圾迴收的代碼位置、讀寫屏障等。第12章討論瞭特定語言相關內容,包括終結機製和弱引用。
  在接下來的章節中,我們將注意力集中在並發環境下。第13章探討瞭現代硬件係統給垃圾迴收器的實現者所帶來的新機遇與挑戰,同時介紹瞭同步、前進、結束、一緻等問題的相關算法。第14章介紹如何在掛起所有應用程序綫程的前提下使用多個綫程進行垃圾迴收。接下來的4章介紹瞭多種不同種類的並發迴收器,它們均放寬瞭“萬物靜止”這一要求,其迴收過程隻需要給用戶程序引入十分短暫的停頓。最後,第19章探討瞭最富挑戰性的課題,即垃圾迴收在硬實時係統中的應用。
  每一章結尾都總結瞭一些需要考慮的問題,其目的在於引導讀者去思考自己的係統有什麼樣的需求,以及如何滿足這些需求,這些問題不僅關乎用戶程序的行為,也關乎操作係統,甚至底層硬件的形為。但這些問題並不能替代對具體章節的閱讀,它們並不是描述現有解決方案,而是提供進一步研究的焦點。
  本書缺少瞭哪些內容?我們僅僅討論瞭內嵌於運行時係統的自動內存管理技術,即使編程語言指定瞭垃圾迴收相關的規範,我們也沒有深入探討其所支持的其他內存管理機製。最明顯的例子是區域(region)的應用[Tofte and Talpin, 1994],其在Java實時規範中占據著顯著的地位。我們僅花費瞭少量的篇幅來介紹區域推斷以及棧上分配技術,並且幾乎沒有涉及其他通過編譯期分析來替代,甚至輔助垃圾迴收的技術。盡管引用計數策略在C++等語言中得到瞭廣泛應用,但我們依然認為它不是在用戶程序中進行自動內存管理的最佳選擇。最後,我們認為,下一代計算機將采用高度非一緻內存架構,並配備異構垃圾迴收器(heterogeneous collector)。這方麵的技術與分布式垃圾迴收(distributed garbage collection)的相關性較大,但在過去的數十年間,分布式垃圾迴收領域鮮有新的研究成果發錶,這不得不說是一件憾事。本書沒有介紹分布式垃圾迴收的相關內容。
  在綫資源本書相關的電子資料參見:http://www.gchandbook.org。
  該網站包含瞭大量垃圾迴收相關資源,包括本書完整的參考文獻。本書末尾所列的參考文獻超過瞭400條,但我們的在綫數據庫中有超過2500條垃圾迴收相關文獻。該數據庫支持在綫搜索,同時還支持BibTeX、PostScript、PDF格式的下載。除瞭相關文章、論文、書籍之外,該參考文獻還包含瞭某些文獻的摘要,對於大多數存在電子版的文獻,我們還給齣瞭相關URL以及DOI信息。
  我們將持續更新本書參考文獻,並將其作為一項社區服務。如果有更多文獻(或者修正意見),歡迎聯係Richard(R.E.Jones@kent.ac.uk),我們將不勝感激。
  緻謝感謝各位同事在本書編寫時所給予的各項支持,沒有大傢的鼓勵(與壓力),本書的問世可能依然遙遙無期。特彆需要感謝的是Steve Blackburn、Hans Boehm、David Bacon、Cliff Click、David Detlefs、Daniel Frampton、Robin Garner、Barry Hayes、Laurence Hellyer、Maurice Herlihy、Martin Hirzel、Tomá? Kalibera、Doug Lea、Simon Marlow、Slan Mycroft、Cosmin Oancea、Erez Petrank、Fil Pizlo、Tony Printezis、John Reppy、David Siegwart、Gil Tene以及Mario Wolczko,感謝諸位十分耐心地解答瞭我們的許多疑問,並對本書的草稿給予諸多有用的反饋意見。同時我們也在此嚮1958年以來所有緻力於自動內存管理研究的計算機科學傢們緻敬,沒有他們的努力,本書也無從而來。
  此外,我們還要嚮Taylor and Francis齣版社的編輯Randi Cohen女士錶示衷心的感謝,感謝她的支持和耐心。她總是能夠及時地給予我們幫助,對我們的延誤也展現齣瞭最大程度的忍耐。同時還要感謝Elizabeth Haylett以及英國作傢協會的幫助,並極力嚮各位作者推薦他們。
  Richard Jones、Antony Hosking、Eliot Moss首先我要特彆感謝Robbie,本書從開始計劃到最終完成,編寫時間超過瞭預期,耗時兩年,在此期間她忍受著我無法想象的巨大壓力。本書的齣版都歸功於她!此外,如果沒有另外兩位閤作者無盡的熱情,本書是否能夠問世恐怕還是很大一個問號。Tony和Eliot,很高興也非常榮幸能與這兩位勤奮博學的同事一起完成此書。
  Richard Jones2002年的夏天,Richard和我計劃為他1996年的Garbage Collection: Algorithms for Automatic Dynamic Memory Management續寫一部新書。在這6年當中,垃圾迴收領域誕生瞭很多新的工作成果,因此有必要對前書的內容進行更新。當時我們不知道,這一本書的問世會再需要9年的時間,由此我不得不佩服Richard的耐心。當設想變成具體的計劃時,我們有幸邀請到Eliot加入本書的編寫工作中,沒有他的全力協助,我們現在可能還處在焦慮的工作之中。本書的前期計劃與工作是Richard與我在2008年休假期間展開的,且本書的編寫工作受到瞭來自英國工程和物理科學研究委員會以及美國國傢科學基金會的支持,我們在此錶示感謝。在此,還要特彆感謝Mandi的鼓勵,感謝你同意我把大量的時間花費在這個項目之上,否則我是不可能完成這項工作的。
  Antony Hosking感謝另外兩位閤著者邀請我參與此項已經充分構思且已擬定齣版的書籍編寫項目。非常榮幸能與你們一同工作,也非常感謝你們能容忍我另類的寫作風格。在此還要感謝英國皇傢工程學院為我2009年11月的英國之行提供支持,這在很大程度上推進瞭此書的完成。除此之外,還要感謝其他基金會間接資助我們參加各種會議,並給予我們麵對麵交流的機會。最需要感謝的是我的妻子以及女兒能包容我齣差或心思不在傢庭上。她們的支持是最重要的,也是我最珍惜的!
  Eliot Moss




用戶評價

評分

這是一本好書,寫得很不錯,值得擁有

評分

好評,點贊!

評分

送貨速度超快,書值得一讀

評分

包裝得很仔細,書也很棒,滿意!

評分

服務好,物流快,品質有保障,相信京東!

評分

這種技術讀物,有能力的還是選擇英文原版吧

評分

很精美,給老公買的!啦啦啦啦

評分

非常非常好

評分

非常好!好好學習學習。

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.qciss.net All Rights Reserved. 圖書大百科 版權所有