2012-01-09 5 views
3

リファレンスがnullに設定されている場合にのみ、ガベージコレクタがコレクションを収集すると言いました。しかし、私はガベージコレクタが、nullに設定されていないスコープ参照のすべてを収集すると思います。オブジェクト参照はいつガベージコレクションされますか?

参照がガベージコレクタによって要求されるときは、誰でも私に教えてください。

+4

"誰か"が間違っています。 – SLaks

答えて

9

GCはオブジェクトを収集します。

GCはライブ参照がなくなってからしばらくしてオブジェクトを収集します。その誰かは、おそらく何を意味するのか

+1

+1:強い参照のないオブジェクトをGCすることができます。 –

+0

リファレンスをnullに設定すると、gcがトリガされますか? – user705414

+0

@ user705414:いいえ(そのため、非決定論的だと言われています)。 – Groo

2

は、あなたはそれがnullにそのオブジェクトへの参照を保持する変数を設定することにより、スコープの外に出る前に、GCは、オブジェクトを収集させることができますということでした(GCは、非決定論的です)。この手法は、非常にまれなケース(たとえば、オブジェクトを参照していない長時間実行されるループの前)の場合には、過去において価値がありました。コンパイラテクノロジは、コンパイラがこれらの条件を検出してそれに応じて十分にスマートなので、このアイデアは事実上役に立たなくなります。

0

GCは「必要なときに」メモリからオブジェクトを削除します。 System.gc()を実行しようとすることはできますが、実行する必要のあるGCのヒントに過ぎません。 Whne GCが実行されると、参照されていないオブジェクト(または参照が弱いオブジェクトなど)が検索されます。 GCは、メモリ空間上の周波数デペンダを実行する。それはエデンの空間で最も頻繁に行われます。デフォルトでは、GCはいっぱいになるとeden空間で実行されますが、JVMをチューンアップできます。

なぜGCを最初に気にしていますか?あなたの問題は何ですか?

関連する問題