0

在这里,我对垃圾收集有一个 Java 疑问:

protected class Robocop {
Integer weight = 200;

Robocop attent(Robocop rb) {
rb = null;
return rb;
}
public static void main(String[] args) {
System.out.println("indeed the solution is behind the corner);

Robocop rb1 = new Robocop();

Robocop rb2 = new Robocop();

Robocop rb3 = rb1.attent(rb2);

rb1 = null;

}
}

你认为有多少对象将符合 GC 条件?

我对此的看法是 4 个对象被垃圾收集 rb3、rb1 和相关的整数包装器实例变量。

4

2 回答 2

2

在您的方法中,您也可以返回null,因为您获得了引用的副本作为方法的参数,而不是原始引用本身。因此,您不能在您的方法中修改原始参考。您只能修改此引用所指的对象。

在 main 的末尾,有 2 个对象符合 GC 条件:一个Robocop(其中一个Integer)。

main 完成后,JVM 将关闭(在您的情况下)并且不会发生 GC。

于 2013-02-05T15:26:57.503 回答
0

最好使用分析器进行尝试,该分析器可以在任何给定时间显示对象的确切数量。看起来您的代码中有错字。您可能的意思是Robocop rb3 = rb1.attent(r2); 假设这就是您的意思,rb2 将有资格进行 GC,然后 rb1 也将有资格,因为它们指向 null。
所以答案是2。

于 2013-02-05T15:29:36.733 回答