小编典典

Java 垃圾收集如何与循环引用一起使用?

all

据我了解,如果没有其他东西“指向”该对象,Java 中的垃圾收集会清理一些对象。

我的问题是,如果我们有这样的事情会发生什么:

class Node {
    public object value;
    public Node next;
    public Node(object o, Node n) { value = 0; next = n;}
}

//...some code
{
    Node a = new Node("a", null), 
         b = new Node("b", a), 
         c = new Node("c", b);
    a.next = c;
} //end of scope
//...other code

a, b, 和c应该被垃圾回收,但它们都被其他对象引用。

Java 垃圾收集如何处理这个问题?(或者它只是内存消耗?)


阅读 57

收藏
2022-08-16

共1个答案

小编典典

如果无法通过从垃圾收集根开始的链访问对象,Java 的 GC
会将其视为“垃圾”,因此将收集这些对象。即使对象可能相互指向形成一个循环,如果它们从根部被切断,它们仍然是垃圾。

有关血腥细节,请参阅附录 A:Java
平台性能中垃圾收集的真相:策略和策略中有关不可访问对象的部分。

2022-08-16