-3

SCJPの第3章に質問があります...次のコードを参照してください...

class Beta{

}

class Alpha extends  Beta{
    static Beta b1;
    Beta b2;
}

class Tester{
    public static void main(String a[]){
        Beta b1 = new Beta();
        Beta b2 = new Beta();

        Alpha a1 = new Alpha();
        Alpha a2 = new Alpha();


        a1.b1 = b1;
        a1.b2 = b1;
        a2.b2 = b2;

        a1 = null;
        b1 = null;
        b2 = null;

        //DO STUFF
        //HOW MANY OBJECTS ARE ELIGIBE FOR GC AT THIS LINE..

    }
}

Q:GC@行に適格なオブジェクトはいくつありますか//DO STUFF

オプション:

Option-1> 0
Option-2> 1
Option-3> 2
Option-4> 3
Option-5> 4
Option-6> 5

本によると:正しい答えは2です:1つのオブジェクトのみがGCの対象となります。

まだこの答えを理解することはできません。どのようにして1つのオブジェクトだけがGCの対象になりますか?

何か案が ??ありがとう、グンジャン。

4

2 に答える 2

1

おそらく、静的であるためa2.b1、への参照がまだ含まれているためです。参照b1もあります。したがって、b1、b2、およびa2は非常に生きています。ガベージコレクションの対象となるのは1つだけです。a1.b2b2a1

于 2012-05-23T22:46:05.737 に答える
-2

ここで...a1.b1またはa2.b1は静的です。そのため、GCすることはできません。ただし、a1は使用されていないため、GCの対象となります。そして、a2.b1はb1を指しています。したがって、b1をGCすることはできません。b2をヌルにしているので、GCパイプラインに追加することもできます。したがって、GCの対象となるのは2つのオブジェクトa1とb2のみです。

于 2012-05-31T10:36:10.600 に答える