假设有一个类A的对象a,它保存了对类B的另一个对象b的引用.这是b的唯一参考.所以现在,如果所有对a的引用被删除,那么a就可以使用GC了.这是否意味着b也准备好收集垃圾?因为,虽然b有一个引用(在一个内),它是不可达到的,因为a是不可达到的.
那么这种情况究竟如何工作呢?我的意思是垃圾收集的顺序.
解决方法
一旦一个对象从根目录无法访问,就会被收集.有关GC根的说明,请参见
this question.
将会收集整个子图(如您所述),假定在该子图中没有可以达到节点.
Java(和.NET)使用处理这种问题的标记和扫描垃圾回收.
在循环依赖性保持不可达的情况下,基于参考计数的系统(例如C的std :: shared_ptr
相关文章
转载注明原文:java – 如果只从垃圾引用对象垃圾? - 代码日志