各種垃圾回收演算法(二)標記-清除( Mark-Sweep )演算法
標記-清除( Mark-Sweep )演算法
第一種實用和完善的垃圾收集演算法是 J. McCarthy 等人在 1960 年提出併成功地應用於 Lisp 語言的標記-清除演算法。仍以餐巾紙為例,標記-清除演算法的執行過程是這樣的:
午餐過程中,餐廳裡的所有人都根據自己的需要取用餐巾紙。當垃圾收集機器人想收集廢舊餐巾紙的時候,它會讓所有用餐的人先停下來,然後,依次詢問餐廳裡的每一個人:“你正在用餐巾紙嗎?你用的是哪一張餐巾紙?”機器人根據每個人的回答將人們正在使用的餐巾紙畫上記號。詢問過程結束後,機器人在餐廳裡尋找所有散落在餐桌上且沒有記號的餐巾紙(這些顯然都是用過的廢舊餐巾紙),把它們統統扔到垃圾箱裡。
正如其名稱所暗示的那樣,標記-清除演算法的執行過程分為“標記”和“清除”兩大階段。這種分步執行的思路奠定了現代垃圾收集演算法的思想基礎。與引用計數演算法不同的是,標記-清除演算法不需要執行環境監測每一次記憶體分配和指標操作,而只要在“標記”階段中跟蹤每一個指標變數的指向——用類似思路實現的垃圾收集器也常被後人統稱為跟蹤收集器( Tracing Collector )
伴隨著 Lisp 語言的成功,標記-清除演算法也在大多數早期的 Lisp 執行環境中大放異彩。儘管最初版本的標記-清除演算法在今天看來還存在效率不高(標記和清除是兩個相當耗時的過程)等諸多缺陷,但在後面的討論中,我們可以看到,幾乎所有現代垃圾收集演算法都是標記-清除思想的延續,僅此一點, J. McCarthy 等人在垃圾收集技術方面的貢獻就絲毫不亞於他們在 Lisp 語言上的成就了。
第一種實用和完善的垃圾收集演算法是 J. McCarthy 等人在 1960 年提出併成功地應用於 Lisp 語言的標記-清除演算法。仍以餐巾紙為例,標記-清除演算法的執行過程是這樣的:
午餐過程中,餐廳裡的所有人都根據自己的需要取用餐巾紙。當垃圾收集機器人想收集廢舊餐巾紙的時候,它會讓所有用餐的人先停下來,然後,依次詢問餐廳裡的每一個人:“你正在用餐巾紙嗎?你用的是哪一張餐巾紙?”機器人根據每個人的回答將人們正在使用的餐巾紙畫上記號。詢問過程結束後,機器人在餐廳裡尋找所有散落在餐桌上且沒有記號的餐巾紙(這些顯然都是用過的廢舊餐巾紙),把它們統統扔到垃圾箱裡。
正如其名稱所暗示的那樣,標記-清除演算法的執行過程分為“標記”和“清除”兩大階段。這種分步執行的思路奠定了現代垃圾收集演算法的思想基礎。與引用計數演算法不同的是,標記-清除演算法不需要執行環境監測每一次記憶體分配和指標操作,而只要在“標記”階段中跟蹤每一個指標變數的指向——用類似思路實現的垃圾收集器也常被後人統稱為跟蹤收集器( Tracing Collector )
伴隨著 Lisp 語言的成功,標記-清除演算法也在大多數早期的 Lisp 執行環境中大放異彩。儘管最初版本的標記-清除演算法在今天看來還存在效率不高(標記和清除是兩個相當耗時的過程)等諸多缺陷,但在後面的討論中,我們可以看到,幾乎所有現代垃圾收集演算法都是標記-清除思想的延續,僅此一點, J. McCarthy 等人在垃圾收集技術方面的貢獻就絲毫不亞於他們在 Lisp 語言上的成就了。
相關文章
- 垃圾回收演算法|GC標記-清除演算法演算法GC
- 垃圾回收的標記清除演算法詳解演算法
- Golang 垃圾回收-三色標記清除演算法Golang演算法
- 《垃圾回收的演算法與實現》第2章GC標記-清除演算法演算法GC
- Java虛擬機器-GC垃圾回收演算法-標記清除法、複製演算法、標記壓縮法、分代演算法Java虛擬機GC演算法
- JVM 垃圾回收演算法和垃圾回收器JVM演算法
- JVM垃圾回收演算法JVM演算法
- Java垃圾回收演算法Java演算法
- 六種主要的垃圾回收演算法和思想演算法
- jvm 之 垃圾標記演算法JVM演算法
- 淺談垃圾回收演算法演算法
- JVM(九):垃圾回收演算法JVM演算法
- 深入理解JVM(③)各種垃圾收集演算法JVM演算法
- 物件回收判定與垃圾回收演算法-JVM學習筆記(1)物件演算法JVM筆記
- java垃圾回收有哪些演算法Java演算法
- jdk8:垃圾回收演算法JDK演算法
- jvm有哪些垃圾回收演算法JVM演算法
- jvm垃圾分代回收演算法JVM演算法
- JVM記憶體分配策略,及垃圾回收演算法JVM記憶體演算法
- JVM 深入筆記(3)垃圾標記演算法JVM筆記演算法
- JVM調優:基本垃圾回收演算法JVM演算法
- 垃圾回收演算法:引用計數法演算法
- JVM系列(五) - JVM垃圾回收演算法JVM演算法
- [演算法]各種二分查詢演算法
- 必知必會JVM垃圾回收——物件搜尋演算法與回收演算法JVM物件演算法
- Python 記憶體管理方式和垃圾回收演算法Python記憶體演算法
- golang 垃圾回收器如何標記記憶體?Golang記憶體
- 【JVM】垃圾回收的四大演算法JVM演算法
- JVM之垃圾回收(1-概述+演算法)JVM演算法
- 深入理解JVM(四)——垃圾回收演算法JVM演算法
- 推薦!視覺化垃圾回收演算法視覺化演算法
- JVM垃圾回收之三色標記JVM
- Java教程分享:JVM垃圾回收機制之物件回收演算法JavaJVM物件演算法
- Python記憶體管理方式和垃圾回收演算法解析Python記憶體演算法
- jvm(三)——jvm垃圾回收演算法以及實現JVM演算法
- Java虛擬機器之垃圾回收演算法Java虛擬機演算法
- javascript 垃圾回收演算法瞭解一下JavaScript演算法
- JVM調優之垃圾定位、垃圾回收演算法、垃圾處理器對比JVM演算法