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 @ 行//DO STUFF
的条件?
选项:
0
1阿拉伯数字
编译失败
不可能知道
运行时引发异常
书中说:正确的安塞特是2。它说"只有一个Sample_1对象(sample1(有资格获得GC,但它具有与之相关的短值。所以有两个对象符合GC的条件">
还是看不懂这个答案。我们已经将样本 1 对象清空。在我看来,GC 没有对象。
知道吗?
由于 sample1 为空,因此为 sample1 分配的内存及其包含的 Short 变量符合垃圾回收条件。
还是看不懂这个答案。我们已经在清空 示例 1 对象。在我看来,GC 没有对象。
将变量设置为 null 并不意味着它是 GC'ed 的,而是意味着它有资格被 GC'ed。 无法以编程方式控制 GC 的运行时间。
得到了解决方案.. 这里。。。有三个对象样本 1,样本 2,样本 3。
sample3 为空,因此不需要对其进行 GV。我的意思是它没有在整个程序中初始化。 示例 2 正在使用到最后一个语句。所以JVM不能GV它。
我们正在清空样本 1。所以它被添加到GV队列中。样本 1 本身具有 Short 对象。所以有两个对象为 GV 准备好了。
谢谢,贡詹。