我有一个问题。
我上课Node
public class Node {
public final Key KEY;
public final Value VALUE;
//Other fields and methods.
}
方法add
public void add(Key key, Value value) {
this.key = key;
this.value = value;
//Other code
}
这段代码:
//something here...
private Node node = new Node();
//Some code
add(node.KEY, node.VALUE);
node = null;
垃圾收集器独占node
和KEY
字段或VALUE
对象是否会使用node
对象,其他所有字段都将保存在内存中?
答案 0 :(得分:1)
KEY
和VALUE
仍然会在您的程序中有一个引用,因此它们不会被垃圾回收。但由于node
在您的程序中没有更多引用,因此它现在是垃圾收集的候选者。
说清楚。 node
及其字段(KEY
和VALUE
除外)将成为GC的候选字段(假设您没有将任何其他字段分配给仍在您的程序中并且在您的程序中引用的对象)< / p>
答案 1 :(得分:1)
基本上,如果一个对象具有引用,无论它是强引用还是弱引用,它都不会被垃圾收集。获取这些对象垃圾的唯一方法是随时使对象为空。
public class Node {
public final Key KEY=null;
public final Value VALUE=null;
//Other fields and methods.
}
确保在被调用之前初始化它们。
就节点而言,因为你在最后一行将它设置为null,它将被收集。将对象设置为null会删除对它的引用,因为它是一个空对象并且是垃圾回收,没有任何内容存在于内存中。