在运行时,对象object1
指的是对象object2
。
但是,object1
没有提到它。
在这种情况下,GC会收集object1
,从而收集object2
吗?
如果是 - object2
有对它的引用并且是“自动”
在这种情况下从内存中删除。
如果不是 - 那是因为object2
有引用它
(来自object1
),这就是为什么不收集它。
但是object1
松散了,应该收集它。
GC如何处理这些问题?它是否首先收集object1
因为它在内存中“松散”,然后,在下一轮中,它会收集object2
,因为它现在已经松散,因为它没有被引用。
或者它在收集object1
时会收集object2
和object1
吗?
另一种情况可能是:object1
正在运行一个进程。
因此,GC不会触及它,并且object2
仍然是object2
的引用
在记忆中也是如此。
但这不会成立 - 据我所知,GC不会查找对象
有CPU时间分配给它(?),它只是参考和随时
没有引用它,从堆中删除对象。
GC如何处理这两个对象 - object1
&在这种情况下object2
?
// ========================================
编辑:
这是关于GC细节的问题。任何人都可以查找“GC收集未引用的对象。”
TIA。
答案 0 :(得分:0)
您正在混合对象和引用,只要堆中的任何对象具有实时引用它就不会被GCed
答案 1 :(得分:0)
How does Java Garbage Collection work with Circular References?给出了答案 - 收集了object1
和object2
,因为"它们无法从GC根目录中获取"。它还意味着它们都是一次性收集的 - 首先是object1
,然后是最终松散的object2
。