追蹤垃圾回收

在計算機編程中,跟蹤垃圾收集(英語: Tracing garbage collection )是一種自動內存管理的算法,該算法通過分析某些「根」對象的引用關係,來確定需要保留的可訪問對象,並釋放其餘的不可訪問對象的內存空間。該算法在實際的軟件工程中得到了廣泛的應用。[1][2]

跟蹤垃圾收集是最常見的垃圾收集方式,以至於「垃圾收集」通常是指跟蹤垃圾收集,而不是引用計數之類的其他方法[原創研究?]

對象的可達性

簡單地說,如果可以從任何一個已經定義的變量開始,直接或者通過其他對象的引用來訪問到某個對象,則該對象是可訪問的。[原創研究?]更準確地說,只有以下兩種對象是可達的:

  • 程序代碼直接定義的變量與對象都是可達的。通常這些對象包括從調用堆棧中任何位置引用的所有對象(即當前正在調用的函數中的所有局部變量和參數)以及任何全局變量[原創研究?]
  • 可訪問對象引用的任何對象都是可達的。[2]也就是說,可達性是傳遞閉包的。

強引用和弱引用

弱集合

基本算法

樸素的標記和掃描

標記-移動算法

參考連結

  1. ^ Concurrent Mark Sweep (CMS) Collector. Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide. Oracle Java Documentation. [2020-03-12]. (原始內容存檔於2021-01-18) (英語). The CMS collector ... is a tracing collector that identifies at least all the reachable objects in the heap. 
  2. ^ 2.0 2.1 吳, 昊; 季, 振洲. 一种基于半空间的不完全拷贝垃圾回收机制. 哈爾濱工業大學學報. 2011, 43 (11): 60–64 [2020-03-27]. ISSN 0367-6234. (原始內容存檔於2020-05-28).