垃圾收集器如何识别根

时间:2012-01-11 00:36:27

标签: java garbage-collection jvm gc-roots

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

2 个答案:

答案 0 :(得分:3)

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

Wikipedia

答案 1 :(得分:2)

使用名为root set enumeratios的技术将识别所有根。这是Mark-sweep专利文献中的一句话。

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

这是专利文献的链接。 Mark sweep patent link

虽然这是由.NET家伙发生的,但我觉得Basics of mark sweep链接会让你很好地理解它是如何工作的。