垃圾收集行为与孤立的循环引用?

时间:2009-01-09 07:52:17

标签: java garbage-collection

如果我在堆上有两个对象相互引用但是它们没有链接到任何引用变量那么那些对象是否有资格进行垃圾回收?

3 个答案:

答案 0 :(得分:20)

是的,他们是。基本上,GC从“已知根”(静态变量,来自alll线程中所有堆栈帧的局部变量)走向查找无法进行垃圾回收的对象。如果无法从根目录获取对象,则可以进行收集。

编辑:汤姆指出了这一点,我认为值得提升到答案本身:

  

从技术上讲,静态变量不是   根 - 它们由类引用   由类加载器引用   哪些是由类引用的   是由对象引用的   由根引用引用。

差异可能与大多数无关,但很高兴知道:)

答案 1 :(得分:5)

答案 2 :(得分:4)

像往常一样,Skeet在钱上。我只想补充一点,你描述的情况是没有使用引用计数(使用早期C ++智能指针的标准策略)的原因。