确定有多少对象符合 GC 条件



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 准备好了。

谢谢,贡詹。

最新更新