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

时间:2012-05-22 17:56:23

标签: java garbage-collection

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的对象。

任何想法?

3 个答案:

答案 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。