0

ガベージ コレクターの動作を完全に理解しているかどうかわからないため、以前の質問に基づいてこの質問を投げかけています。

このプログラムでは:

class A {
    Boolean b;
    A easyMethod(A a){
       return new A();
    }
    public static void main(String [] args){
        A a1 = new A();
        A a2 = new A();
        A a3 = new A();
        a3 = a1.easyMethod(a2);
        a1 = null;
        // Some other code 
    }
} 

ガベージ コレクションの対象となるオブジェクトの数は? a3null になることはありませんが、new A()それに割り当てられた最初のオブジェクト ( ) もガベージ コレクションする必要があると思います。私は正しいですか?したがって、正解は再び 2 つのオブジェクトになると思います。実際には何が真実ですか?

4

2 に答える 2

2

a3nullになることはありませんが、それに割り当てられた最初のオブジェクト()もガベージコレクションされる必要があると思いますnew A()。これは、参照がまだそれを指していないためです。私は正しいですか?したがって、正解は再び2つのオブジェクトになると思います。

はい、これは正確に正しいです。a3元々はの1つのインスタンスを指していますAが、その変数が別のインスタンスを指すように再割り当てされると、元のインスタンスに到達する方法がなくなるため、その元のインスタンスはガベージコレクションの対象になります。

于 2012-11-13T22:03:28.833 に答える
2

はい、あなたは正しいです。

a1 = <instance 1>
a2 = <instance 2>
a3 = <instance 3>
a3 = <instance 4> //as a returned value
a1 = null

そのためinstance 1instance 3は参照されなくなったため、収集される可能性があります。

于 2012-11-13T22:06:33.987 に答える