“南华早报”第三章有一个问题。
请参阅以下代码:
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
编译失败
不可能知道
在运行时抛出异常
书中说:正确的答案是2。它说“只有一个Sample_1对象(sample1)符合GC的条件,但它有与it.So相关的短值,有两个对象符合GC的条件”。
仍然不能理解这个答案。我们已经将sample1对象设为空。在我看来,没有用于GC的对象。
有什么想法吗?
发布于 2012-05-23 17:13:51
找到解决方案了..这里..。有三个对象sample1、sample2和sample3。
sample3为空,所以不需要GV它。我的意思是它并没有在整个程序中初始化。sample2正在使用中,直到最后的statement.So JVM不能GV它。
我们要将sample1置为空。所以它被添加到GV中,queue.And sample1本身有很短的object.So,有两个对象为GV做好了准备。
谢谢,古扬。
发布于 2012-05-23 01:59:27
因为sample1为空,所以分配给sample1的内存和它包含的Short变量有资格进行垃圾收集。
发布于 2012-05-23 03:07:04
仍然不能理解这个答案。我们已经将sample1对象设为空。在我看来,没有用于GC的对象。
将变量设置为null并不意味着它已被GC,它意味着它有资格被GC。您不能以编程方式控制GC何时运行。
https://stackoverflow.com/questions/10707414
复制相似问题