对象 - “链”上的Java GC在内存中松散

时间:2014-06-19 17:19:04

标签: java garbage-collection

在运行时,对象object1指的是对象object2。 但是,object1没有提到它。

在这种情况下,GC会收集object1,从而收集object2吗?

如果是 - object2有对它的引用并且是“自动” 在这种情况下从内存中删除。

如果不是 - 那是因为object2有引用它 (来自object1),这就是为什么不收集它。 但是object1松散了,应该收集它。

GC如何处理这些问题?它是否首先收集object1因为它在内存中“松散”,然后,在下一轮中,它会收集object2,因为它现在已经松散,因为它没有被引用。 或者它在收集object1时会收集object2object1吗?

另一种情况可能是:object1正在运行一个进程。 因此,GC不会触及它,并且object2仍然是object2的引用 在记忆中也是如此。 但这不会成立 - 据我所知,GC不会查找对象 有CPU时间分配给它(?),它只是参考和随时 没有引用它,从堆中删除对象。

GC如何处理这两个对象 - object1&在这种情况下object2

// ========================================

编辑:

这是关于GC细节的问题。任何人都可以查找“GC收集未引用的对象。”

TIA。

2 个答案:

答案 0 :(得分:0)

您正在混合对象和引用,只要堆中的任何对象具有实时引用它就不会被GCed

答案 1 :(得分:0)

How does Java Garbage Collection work with Circular References?给出了答案 - 收集了object1object2,因为"它们无法从GC根目录中获取"。它还意味着它们都是一次性收集的 - 首先是object1,然后是最终松散的object2