寫在前面
垃圾回收技術給編程所帶來的好處是不言而喻的,它能夠從根本上解決軟體開發程序中的記憶體管理問題,大大提升開發效率,
對于開發人員而言,在享受垃圾回識訓制所帶來便利的同時,是否曾想過隱藏在它背后的秘密?在進行技術選型時,如何評估垃圾回收對性能可能造成的影響?面對編程語言所提供的種類繁多的垃圾回收相關引數,應當如何進行配置與調優?
今天小伙伴們有福了,小編特意為大家帶來這篇由垃圾記憶體演算法出發,深度掌握垃圾演算法技術實作的秘籍,相信通過本篇,開發人員能夠更加深入地了解垃圾回收方面的相關問題、不同回收器的作業模式,接下來一起來看一下這篇由麻省理工學院大牛撰寫的神書吧!!!
第1章:引言
- 1.1 顯式記憶體釋放
- 1.2 自動動態記憶體管理
- 1.3 垃圾回收演算法之間的比較
- 1.4 性能上的劣勢
- 1.5 實驗方法

第1章以探討為什么需要自動記憶體管理作為開篇,簡要介紹了對不同垃圾回收策略進行比較的方法,該章結尾介紹了貫穿全書的抽象記法與偽代碼描述方式,
第2章:標記-清掃回收
- 2.1 標記-清掃演算法
- 2.2 三色抽象
- 2.3 改進的標記清掃演算法
- 2.4 位圖示記
- 2.5 懶惰清掃
- 2.6 標記程序中的高速快取不命中問題
- 2.7 需要考慮的問題

第3章:標記-整理回收
- 3.1 雙指標整理演算法
- 3.2 Lisp 2演算法
- 3.3 引線整理演算法
- 3.4 單次遍歷演算法
- 3.5 需要考慮的問題

第4章:復制式回收
- 4.1 半區復制回收
- 4.2 遍歷順序與區域性
- 4.3 需要考慮的問題

第5章:參考計數
- 5.1 參考計數演算法的優缺點
- 5.2 提升效率
- 5.3 延遲參考計數
- 5.4 合并參考計數
- 5.5 環狀引|用計數
- 5.6 受限域引|用計數
- 5.7 需要考慮的問題

第2-5章詳細描述了4種經典的垃圾回收演算法,分別是標記-清掃演算法、標記-整理演算法、復制式回收演算法以及參考計數演算法,本篇對這些回收演算法進行了深入的研究,并特別關注了其在現代硬體設施上的實作,
第6章:垃圾回收器的比較
- 6.1 吞吐量
- 6.2 停頓時間
- 6.3 記憶體空間
- 6.4 回收器的實作
- 6.5 自適應系統
- 6.6 統一垃圾回收理論

第6章深人比較了第2~ 5章所介紹的回收策略與演算法,評估了它們各自的優缺點以及在不同情況下的適用性,
第7章:記憶體分配
- 7.1 順序分配
- 7.2 空閑鏈表分配
- 7.3 記憶體碎片化
- 7.4 磁區適應分配
- 7.5 磁區適應分配與簡單空閉鏈表分配的結合
- 7.6 其他需要考慮的問題
- 7.7 并發系統中的記憶體分配
- 7.8 需要考慮的問題

記憶體回收策略同樣依賴于記憶體分配策略,第7章介紹了多種不同的記憶體分配技術,并進一步探究了自動垃圾回收與顯式記憶體管理這兩種場景下分配策略的不同之處,
第8章:堆記憶體的劃分
- 8.1 術語
- 8.2 為何要進行磁區
- 8.3 如何進行磁區
- 8.4 何時進行磁區

前7章假定所有堆中的物件均采用相同的管理策略,但根據許多因素可知這并非一種良好的設計策略,第8章討論了為何需要將堆劃分為多個不同的空間,以及如何管理這些空間,
第9章:分代垃圾回收
- 9.1 示例
- 9.2 時間測量
- 9.3 分代假說
- 9.4 分代與堆布局
- 9.5 多分代
- 9.6 年齡記錄
- 9.7 對程式行為的適應
- 9.8 分代間指標
- 9.9 空間管理
- 9.10 中年優先回收
- 9.11 帶式回收框架
- 9.12 啟發式方法在分代垃圾回收中的應用
- 9.13 需要考慮的問題
- 9.14 抽象分代垃圾回收

第9章介紹了最成功的物件管理策略之一:分代垃圾回收,
第10章:其他磁區策略
- 10.1 大物件空間
- 10.2 基于物件拓撲結構的回收器
- 10.3 混合標記清掃、復制式回收器
- 10.4 書簽回收器
- 10.5 超參考計數回收器
- 10.6 需要考慮的問題

第10章介紹了大物件的管理策略以及其他磁區策略,
第11章:運行時介面
- 11.1 物件分配介面
- 11.2 指標查找
- 11.3 物件表
- 11.4 來自外部代碼的參考
- 11.5 堆疊屏障
- 11.6 安全回收點以及賦值器的掛起
- 11.7 針對代碼的回收
- 11.8 讀寫屏障
- 11.9 地址空間管理
- 11.10 虛擬記憶體頁保護策略的應用
- 11.11 堆大小的選擇
- 11.12 需要考慮的問題

在構建垃圾回收器的程序中,與運行時系統其他部分的對接是最復雜的內容之一,因此第11章用了一整章的篇幅來介紹運行時介面,包括指標查找、能夠安全發起垃圾回收的代碼位置、讀寫屏障等,
第12章:特定語言相關內容
- 12.1 終結
- 12.2 弱參考
- 12.3 需要考慮的問題

第12章討論了特定語言相關內容,包括終結機制和弱參考,
第13章:并發演算法預備知識
- 13.1 硬體
- 13.2 硬體記憶體一致性
- 13.3 硬體原語
- 13.4 前進保障
- 13.5 并發演算法的符號記法
- 13.6 互斥
- 13.7 作業共享與結束檢測
- 13.8 并發資料結構
- 13.9 事務記憶體
- 13.10 需要考慮的問題

第13章探討了現代硬體系統給垃圾回收器的實作者所帶來的新機遇與挑戰,同時介紹了同步、前進、結束、一致等問題的相關演算法,
第14章:并行垃圾回收
- 14.1 是否有足夠多的作業可以并行
- 14.2 負裁均衡
- 14.3 同步
- 14.4 并行回收的分類
- 14.5 并行標記
- 14.6 并行復制
- 14.7 并行清掃
- 14.8 并行整理
- 14.9 需要考慮的問題

第14章介紹如何在掛起所有應用程式執行緒的前提下使用多個執行緒進行垃圾回收,
第15章:并發垃圾回收
- 15.1 并發回收的正確性
- 15.2 并發回收的相關屏障技術
- 15.3 需要考慮的問題

第16章:并發標記清掃演算法
- 16.1 初始化
- 16.2 結束
- 16.3 分配
- 16.4 標記程序與清掃程序的并發
- 16.5 即時標記
- 16.6 抽象并發回收框架
- 16.7 需要考慮的問題

第17章:并發復制、并發整理演算法
- 17.1 主體并發復制: Baker演算法
- 17.2 Brooks閆接屏障
- 17.3 自洗掉讀屏障
- 17.4 副本復制
- 17.5 多版本復制
- 17.6 Sapphire回收器
- 17.7 并發整理演算法
- 17.8 需要考慮的問題

第18章:并發參考計數演算法
- 18.1 簡單參考計數演算法回顧
- 18.2 緩沖參考計數
- 18.3 并發環境下的環狀參考計數處理
- 18.4 堆快照的獲取
- 18.5 滑動視圖引|用計數
- 18.6 需要考慮的問題

第15-18章介紹了多種不同種類的并發回收器,它們均放寬了“萬物靜止”這一要求,其回收程序只需要給用戶程式引入十分短暫的停頓,
第19章:實時垃圾回收
- 19.1 實時系統
- 19.2 實時回收的調度
- 19.3 基于作業的實時回收
- 19.4 基于間隙的實時回收
- 19.5 基于時間的實時回收:Metronome回收器
- 19.6 多種調度策略的結合:“稅收與開支”
- 19.7 記憶體碎片控制
- 19.8 需要考慮的問題

最后,第19章探討了最富挑戰性的課題,即垃圾回收在硬實時系統中的應用,
總結
本篇自始至終都密切關注現代硬體所帶來的機遇與限制,對區域性問題的考量將貫穿全文,我們默認應用程式可能是多執行緒的,盡管本篇涵蓋了很多更加簡單、更加傳統的演算法,但我們還是花了全篇近一半的篇幅來介紹并行回收、增量回收、并發回收以及實時回收,
怎么樣,通讀到這里,你是否已經被他迷上了?那就記得轉發+關注小編,直接查看下方圖片,掃碼添加或私信關鍵字【學習】即可馬上獲享完整PDF版,

還在等待什么,抓緊時間來學習提升吧!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/125782.html
標籤:其他
