0

我有一个问题。

我有课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对象将被垃圾收集器独占使用KEYVALUE字段或node具有所有其他字段的对象将保存在内存中?

4

2 回答 2

1

KEY并且VALUE在您的程序中仍然会有参考,因此它们不会被垃圾收集。但是由于node您的程序中没有更多的引用,它现在是垃圾回收的候选对象。

说清楚。node及其字段,不包括KEY并且VALUE将成为 GC 的候选对象(假设您没有将任何其他字段分配给仍然存在并在程序中引用的对象)

于 2013-07-01T19:27:24.253 回答
1

基本上,如果一个对象有一个引用,无论它是强引用还是弱引用,它都不会被垃圾收集。让这些对象被垃圾回收的唯一方法是随时清空该对象。

public class Node {
    public final Key   KEY=null;
    public final Value VALUE=null;
    //Other fields and methods.
}

只要确保它们在被调用之前被初始化。

就节点而言,因为您在最后一行将其设置为 null,它将被垃圾收集。将对象设置为 null 会删除引用,因此它是一个 null 对象,并且被垃圾收集,内存中没有任何内容。

于 2013-07-01T19:32:49.890 回答