2

SCJP テストからの質問:

 class A{
      A aob;
      public static void main(String args[]){
           A a=new A();
           A b=new A();
           A c=new A();
           a.aob=b;
           b.aob=a;
           c.aob=a.aob;
           A d=new A().aob=new A();
           c=b;
           c.aob=null;
           System.gc();
      } 
  }

質問:c.aob=nullの実行後、ガベージ コレクションの対象となるオブジェクトの数はいくつですか。

1だと思いますが、正解は2です。

4

1 に答える 1

5

グーグルから私はこのスレッドを見つけました。

最初のオブジェクトは、c によって最初に参照されたオブジェクトです。

A a = 新しい A();
A b= 新しい A();
A c=新しい A() ;
a.aob=b;
b.aob=a;
c.aob=a.aob;
A d= 新しい A().aob=新しい A();
c=b ; //(1)

(1)で対象となります。

GC の対象となる他のオブジェクトは at ステートメントです

A d=新しい A() .aob=新しい A() ;

ここで、太字のテキストで作成されたオブジェクトが GC の対象になります。イタリック体のオブジェクトは d に割り当てられます。

于 2009-12-14T12:02:35.477 に答える