5

标记-清除垃圾收集器的第一阶段是标记(查找)堆上的所有活动对象。为此,必须有一个起点或根,所有标记都从这里开始。GC 如何识别这样的根?

4

2 回答 2

3

“假定一组杰出的对象是可访问的:这些被称为根。通常,这些包括从调用堆栈中的任何位置引用的所有对象(即,当前正在调用的函数中的所有局部变量和参数),和任何全局变量。

维基百科

于 2012-01-11T00:41:29.240 回答
2

使用称为根集枚举的技术将识别所有根。这是来自 Mark-sweep 专利文件的句子。

在第一阶段,可以识别当前运行程序中对对象的所有直接引用。这些引用称为根,或一起称为根集,识别所有此类引用的过程可称为根集枚举

这是专利文件的链接。马克扫专利链接

尽管它是由 .NET 人编写的,但我觉得标记扫描链接的基础知识会让您很好地理解它是如何工作的。

于 2012-01-11T00:48:42.583 回答