垃圾收集器如何识别根节点

5

标记-清除垃圾收集器的第一阶段是查找堆上所有存活对象并进行标记。为了做到这点,必须有一个起始点或根节点,从它开始进行所有标记。GC如何识别这样的根节点呢?

2个回答

3

假设一组重要的对象是可达的,这些对象称为根。通常,这些包括调用堆栈中任何地方引用的所有对象(即当前被调用函数中的所有局部变量和参数)以及任何全局变量。

维基百科


2
使用称为根集枚举的技术将识别所有根。以下是来自标记清除专利文件的句子。
在第一阶段中,可以识别出当前正在运行的程序对对象的所有直接引用。这些引用被称为根或根集,识别所有这样的引用的过程称为根集枚举。
这是专利文件的链接:Mark sweep patent link 虽然它是由.NET人员编写的,但我认为Basics of mark sweep链接会让您更好地了解其工作原理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接