追踪垃圾回收

在计算机编程中,跟踪垃圾收集(英語: 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).