标记清除垃圾收集器的第一阶段是标记(查找)堆上的所有活动对象。要做到这一点,必须有一个起点或根,所有标记都是从这里开始的。GC是如何识别这些根的?
发布于 2012-01-11 08:48:43
使用称为根集枚举的技术,所有根都将被识别。下面是Mark-sweep专利文档中的一句话。
在第一阶段中,可以识别来自当前运行的程序的对对象的所有直接引用。这些引用被称为根,或者一起称为根集,并且标识所有这样的引用的过程可以被称为根集枚举
这里是专利文档的链接。Mark sweep patent link
尽管它是由.NET家伙写的,但我觉得Basics of mark sweep link会让你很好地理解它是如何工作的。
发布于 2012-01-11 08:41:29
“假定一组独特的对象是可访问的:这些对象称为根。通常,这些对象包括从调用堆栈中的任何位置引用的所有对象(即,当前正在调用的函数中的所有局部变量和参数)以及任何全局变量。
Wikipedia
https://stackoverflow.com/questions/8812635
复制相似问题