
中村成洋 相川光
本書分爲“算法篇”和“實現篇”兩大部分。算法篇介紹了標記-清除算法、引用計數法、複製算法、標記-壓縮算法、保守式GC、分代垃圾回收、增量式垃圾回收、RC Immix算法等幾種重要的算法;實現篇介紹了垃圾回收在Python、DalvikVM、Rubinius、V8等幾種語言處理程序中的具體實現。本書適合各領域程序員閱讀。
2024.No79: 24年第36本技術書。垃圾回收,Java開發必知。實際上垃圾回收最早實現是在1959年的Lisp語言裏。分算法與實現2部分,算法部分回顧標記-清除、引用計數法、複製、標記壓縮、分代等非常經典的算法,也介紹保守式、增量式、RC Immix等之前沒聽過的算法(Java開發8年多),且很貼心地給出算法的缺陷以及改進版本算法。實現部分講述Python、DalvikVM、Rubinius、V8等具體實現。垃圾回收是每個工程師必備知識。
本書理論部分看完了,實現部分看了一點。非常適合不太瞭解垃圾回收算法基本原理的同學
對垃圾回收算法進行了系統的講解,對垃圾回收一知半解的推薦看下這本書。
由於我對計算機底層有深入的瞭解,同時又具備Java JVM 相關的背景知識和實踐經驗,所以讀得比較輕鬆。作者在開頭提出GC的本質是虛擬內存,令人耳目一新,可惜後面沒有對此作進一步的闡述,頗爲遺憾。本書出版於2010年,距今已10年了,內容不敢說過時,但起碼不全面,如果只看算法層面,還是比較系統的。另外翻譯上有一些瑕疵,不適合作爲GC的入門讀物。
和看過的其他日本技術書籍類似,作爲入門讀物是很好的選擇。比較注重實踐,通過結合圖示幫助讀者理解算法的脈絡。不過在理論連貫性和深度方面稍微薄弱一些。其他類似的書籍有《垃圾回收算法手冊 自動內存管理的藝術》,風格類似,內容比此書更加豐富。《垃圾收集》(Richard Jones、Rafael Lins)也不錯。
本書涉及的垃圾回收(Garbage Collection, GC)與其說是理論,其實更偏向技術層面,然而它卻有着令人喫驚的漫長曆史。GC在計算機發展的激流中沒有浮起,也沒有沉下。直到1995年Java發佈,因爲其內藏GC,人們纔開始意識到GC的作用。 追溯Lisp語言的祕史我們會發現,GC這種讓已經無法利用的內存實現自動再利用(可能稱爲“內存資源回收”更恰當)的技術,是於Lisp的設計開始約1年後,也就是1959年的夏天首次出現的。實現GC的是一個叫D. Edwards的人。至今已經經過了50多年的漫長歲月。 這期間人們進行了海量的研究和開發,與其相關的論文也堆積如山。這麼說來,我也寫過幾篇關於GC的論文。然而讓我喫驚的是,這麼久以來竟然沒有一本關於GC的教科書或專業書籍。英語界曾於1996年首次針對GC出版了一本Garbage Collection(Richard E. Jones、Rafael D. Lins著),這是37年來在GC領域的一次破天荒的壯舉,本書也將其作爲了參考文獻。然而在日本,本書可以說是第一本用日語寫的GC專業圖書,可謂五十年磨一劍,在此也對年輕有爲的二位作者致以深深的敬意。
日本工程師在描述計算機基礎知識,經典知識上確實是精益求精,不遺餘力的工匠體現。理解從java開始GC受到推崇,此後,所有高級語言都無法拒絕GC的魅力,而要實現更強大的GC,深入理解GC算法是必經之路。
關於GC算法最好的入門書籍之一。各種算法結合僞代碼和程序,解釋得足夠易懂。看一遍下來,雖然說也許不能每個人都瞭解裏面的各種門門道道,但起碼對於大致的流程,各種算法的優缺點有個大概的印象。 後面有一大部分是關於各種虛擬機和語言的gc算法實例的,這部分內容有點過於多了(雖然作者也簡化了很多的源代碼)。特別是每種語言和虛擬機的內存分配策略,花了非常多篇幅,如果沒有基礎,看着還是很喫力的,大家可以根據興趣和能力選擇略讀還是細讀吧。總體而已還是很值得看的一本書。
垃圾回收的發展卻非常快,作者書中介紹的各種算法和組合,千變萬化,光是幾年前相對還比較熟悉的V8,跟本書寫作的2009年,已經有很大變化。 但是陽光底下又沒有太多新鮮事,作者寫書之後纔出現的Go使用的三色標記和增量回收,是Dijkstra等人1970年代的論文就在研究的。 前兩年讀這本書前,對引用計數有種偏見,不能處理循環依賴,結合部分標記清除算法,並不是問題,就像Python,不同的策略可以解決不同問題,永恆的是權衡取捨。 對我們的啓示是,真的開發垃圾回收器,應該從根本思考問題,就是第一性原理,要從一個矩陣中獲得完整的信息,必然要做的是遍歷每一個節點,做標記,記錄獲得的信息。 對象和空間也並不神祕,對象中非指針的基本類型決定佔用的空間,空間就是連續的可尋址的固定大小的塊,用指針和偏移來分割
內容不夠詳實,可以作爲正式書籍的補充