这里我对垃圾收集存在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和相关的Integer包装器实例变量。
答案 0 :(得分:2)
在你的方法中你也可以返回null
,因为你得到了一个引用的副本作为你的方法的参数,而不是原始的引用本身。因此,您无法修改方法内部的原始引用。您只能修改此引用所引用的对象。
在main结束时,2个对象将有资格使用GC:一个Robocop
(内置一个Integer
。
在main完成后,JVM将关闭(在您的情况下)并且不会发生GC。
答案 1 :(得分:0)
最好使用分析器进行尝试,分析器可以在任何给定时间显示对象的确切数量。
看起来您的代码中有拼写错误。你可能意味着Robocop rb3 = rb1.attent(r2);
假设这是你的意思,rb2将有资格获得GC,然后rb1也有资格,因为它们指向null。
所以答案是2。