SCJP第三章有一个问题 请参阅以下代码:
public class Sample_1 {
Short story = 200;
Sample_1 go(Sample_1 sample){
sample = null;
return sample;
}
public static void main(String a[]){
Sample_1 sample1 =new Sample_1();
Sample_1 sample2 =new Sample_1();
Sample_1 sample3 = sample1.go(sample2);
sample1 = null;
//DO STUFF
}
}
问题:许多对象如何符合GC @ line //DO STUFF
的条件?
选项:
0
1
2
编译失败
它不可能知道
运行时抛出异常
书中说:正确的ansert是2.它说“只有一个Sample_1对象(sample1)符合GC的条件,但它与它有关联的Short值。所以有两个对象可以用于GC”
仍然无法理解这个答案。我们已经将sample1对象归零。从我的角度来看,没有GC的对象。
任何想法?
答案 0 :(得分:1)
由于sample1为null,因此为sample1分配的内存及其包含的Short变量可用于垃圾回收。
答案 1 :(得分:0)
仍然无法理解这个答案。我们已经归零了 sample1对象。从我的角度来看,没有GC的对象。
将变量设置为null并不意味着它是GC,它意味着它是合法的GC。您无法以编程方式控制GC何时运行。
答案 2 :(得分:0)
得到解决方案.. 这里......有三个对象sample1,sample2,sample3。
sample3为null所以不需要GV它。我的意思是它没有在整个计划中初始化。 sample2正在使用到最后一个语句。所以JVM不能GV它。
我们将sample1归零。所以它被添加到GV队列中。而sample1本身也有Short对象。所以有两个对象可以用于GV。
谢谢,Gunjan。