【垃圾回收算法與實現讀書筆記】爲什麼標記-清除算法與寫時複製技術不兼容?

1.標記階段

爲堆裏的所有活動對象打上標記

2.清除階段

遍歷整個堆,回收沒有打上標記的對象

3.寫時複製技術

就是多個進程共用一段內存時,其中任意一個進程都不能直接重寫共享內存。因爲從其他程序訪問時,會發生數據不一致的情況。
在重寫時,要複製自己私有空間的數據,對這個私有空間進行重寫。複製後只訪問這個私有空間,不訪問共享內存。像這樣,因爲這門技術是“在寫入時進行復制”的,所以才被稱爲寫時複製技術。

3.爲什麼與寫時複製技術不兼容?

書上是這樣說的:

這樣的話,GC 標記 - 清除算法就會存在一個問題 — 與寫時複製技術不兼容。即使沒重寫對象,GC 也會設置所有活動對象的標誌位,這樣就會頻繁發生本不應該發生的複製,壓迫到內存空間。
爲了處理這個問題,我們採用位圖標記(bitmap marking)的方法。關於這個方法,將在 2.6節中介紹。

看了好幾遍看不懂,直到看到了這個帖子下一位老哥的解釋:點我查看
意思就是當標記-清除算法寫時複製技術同時應用時,那麼在標記階段修改標記位時,就可能會引發共享內存複製到私有內存,就會導致空間浪費。
至於如何處理這個問題,書上已經告訴我們了,就是位圖標記,其實就是操作系統課上學的位視圖法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章