Java中对象的引用

时间:2013-07-01 19:25:38

标签: java memory-management

我有一个问题。

我上课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;

垃圾收集器独占nodeKEY字段或VALUE对象是否会使用node对象,其他所有字段都将保存在内存中?

2 个答案:

答案 0 :(得分:1)

KEYVALUE仍然会在您的程序中有一个引用,因此它们不会被垃圾回收。但由于node在您的程序中没有更多引用,因此它现在是垃圾收集的候选者。

说清楚。 node及其字段(KEYVALUE除外)将成为GC的候选字段(假设您没有将任何其他字段分配给仍在您的程序中并且在您的程序中引用的对象)< / p>

答案 1 :(得分:1)

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

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

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

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