追蹤垃圾回收
外觀
在計算機編程中,跟蹤垃圾收集(英語: Tracing garbage collection )是一種自動內存管理的算法,該算法通過分析某些「根」對象的引用關係,來確定需要保留的可訪問對象,並釋放其餘的不可訪問對象的內存空間。該算法在實際的軟體工程中得到了廣泛的應用。[1][2]
跟蹤垃圾收集是最常見的垃圾收集方式,以至於「垃圾收集」通常是指跟蹤垃圾收集,而不是引用計數之類的其他方法[原創研究?]。
對象的可達性
[編輯]簡單地說,如果可以從任何一個已經定義的變量開始,直接或者通過其他對象的引用來訪問到某個對象,則該對象是可訪問的。[原創研究?]更準確地說,只有以下兩種對象是可達的:
- 程序代碼直接定義的變量與對象都是可達的。通常這些對象包括從調用堆疊中任何位置引用的所有對象(即當前正在調用的函數中的所有局部變量和參數)以及任何全局變量。[原創研究?]
- 可訪問對象引用的任何對象都是可達的。[2]也就是說,可達性是傳遞閉包的。
強引用和弱引用
[編輯]弱集合
[編輯]基本算法
[編輯]樸素的標記和掃描
[編輯]標記-移動算法
[編輯]參考連結
[編輯]- ^ 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.0 2.1 吳, 昊; 季, 振洲. 一种基于半空间的不完全拷贝垃圾回收机制. 哈爾濱工業大學學報. 2011, 43 (11): 60–64 [2020-03-27]. ISSN 0367-6234. (原始內容存檔於2020-05-28).