具有孤立循环引用的垃圾回收行为?

7
如果我在堆上有两个相互引用但不链接到任何引用变量的对象,那么这些对象是否可以被垃圾收集?
3个回答

20

是的,它们是相关的。基本上,GC从“已知根”(静态变量、所有线程中的所有堆栈帧的局部变量)开始遍历以查找无法进行垃圾回收的对象。如果没有从根获取对象的方法,则该对象可用于收集。

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

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

大多数情况下,这种差异可能无关紧要,但了解这一点是很好的:)


从技术上讲,静态变量不是根节点-它们被类引用,这些类又被类加载器引用,这些类被对象引用,而这些对象则被根引用所引用。 - Tom Hawtin - tackline

5

4

像往常一样,Skeet说得很对。我只想补充一下,你描述的情况是为什么引用计数(早期C++智能指针的标准策略)不再使用的原因。


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