Java 垃圾回收如何与循环引用一起工作? [英] How does Java Garbage Collection work with Circular References?
问题描述
根据我的理解,Java 中的垃圾回收会在没有其他对象指向"某个对象的情况下清理该对象.
From my understanding, garbage collection in Java cleans up some objects if nothing else is 'pointing' to that object.
我的问题是,如果我们有这样的事情会发生什么:
My question is, what happens if we have something like this:
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
应该被垃圾收集,但它们都被其他对象引用.
a
, b
, and c
should be garbage collected, but they are all being referenced by other objects.
Java 垃圾收集如何处理这个问题?(或者仅仅是内存消耗?)
How does the Java garbage collection deal with this? (or is it simply a memory drain?)
推荐答案
Java 的 GC 将对象视为垃圾",如果它们无法通过从垃圾收集根开始的链访问,则将收集这些对象.尽管对象可能相互指向形成一个循环,但如果从根上切断它们,它们仍然是垃圾.
Java's GC considers objects "garbage" if they aren't reachable through a chain starting at a garbage collection root, so these objects will be collected. Even though objects may point to each other to form a cycle, they're still garbage if they're cut off from the root.
请参阅 Java 平台中的附录 A:有关垃圾收集的真相中有关无法访问对象的部分性能:针对血腥细节的策略和策略.
这篇关于Java 垃圾回收如何与循环引用一起工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!