0

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

options:
0
1
2
Compilation Fails
Its not possible to know
运行时抛出异常

书上说:正确的断言是 2。它说“只有一个 Sample_1 对象(sample1)有资格进行 GC,但它有与之关联的 Short 值。所以有两个对象符合 GC”

仍然无法理解这个答案。我们已经在清空 sample1 对象。在我看来,GC 没有对象。

任何的想法?

4

3 回答 3

1

由于 sample1 为空,分配给 sample1 的内存和它包含的 Short 变量符合垃圾回收的条件。

于 2012-05-22T17:59:27.013 回答
0

仍然无法理解这个答案。我们已经在清空 sample1 对象。在我看来,GC 没有对象。

将变量设置为 null 并不意味着它被 GC'ed,这意味着它有资格被 GC'ed。您无法以编程方式控制 GC 何时运行。

于 2012-05-22T19:07:04.230 回答
0

得到了解决方案......这里......有三个对象sample1,sample2,sample3。

sample3 为空,所以不需要 GV。我的意思是它没有在整个程序中初始化。sample2 一直在使用直到最后一条语句。所以 JVM 不能 GV 它。

我们正在使 sample1 归零。所以它被添加到 GV 队列中。并且 sample1 本身有 Short 对象。所以有两个对象准备好 GV。

谢谢,甘扬。

于 2012-05-23T09:13:51.163 回答