0

http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#99740の例 A3.3 によると、オブジェクトがガベージ コレクションに使用できない可能性があるとのことです。対象外かもしれません。IT は、メソッドがスタックから取り除かれた場合にのみ使用できます。ここで、次のケースを考えてみます。

void foo(){
Dog a = new Dog();
Dog b = new Dog();
b=a
while(true)//loop for long time
}

b を参照するオブジェクトは、すぐにガベージ コレクションに使用できるようになりますか、それとも foo() メソッドが返された後にのみ使用できるようになりますか。

4

4 に答える 4

5

スタックスロットは、メソッドが終了するまで使用され続けます。内部}に対応するJVMオペコードがないため、JVMはそれが内部スコープから外れたことを認識しません。しかし、メソッドがいつ戻るかはわかります。

于 2011-08-15T06:40:26.460 に答える
2

犬はb、変数を再割り当てするとすぐにガベージ コレクションの対象になる必要があることを以前は知っていました。

aboth andとして知られる犬b(再割り当て後) は、メソッドの最後までスコープ内に残ります。

于 2011-08-15T06:30:57.487 に答える
1

オリジナルb(2 番目にDog作成されたもの) は、ループが開始する前にガベージ コレクションにすぐに使用できます。これは、保持されている参照 (最初に作成されたものab参照の両方) がないためです。 Dog

于 2011-08-15T06:30:58.807 に答える
0

すでに与えられた正しい答えを除いて、あなたのテストには本質的に欠陥があります。空のwhileループを実行しても、メモリが不足し、Java が古いオブジェクトのクリーンアップを行う必要がある場合にのみ (少し単純化するために) 実行されるため、GC がトリガーされることはありません。

于 2011-08-15T06:33:54.360 に答える