参照を無効にすることを考えていたときには、これは少し異なります。
A-> B-> Cというオブジェクトチェーンがある場合、Aには到達できない場合、A、B、Cはすべてガベージコレクションの対象となります(他のものはBまたはCを指していると仮定します)。明示的に参照A-> BまたはB-> Cをヌルに設定する必要はなく、決して必要はありません。
それ以外にも、実際にはコレクションのオブジェクトを扱っているため、ほとんどの場合、問題は実際には発生しません。一般的には、適切なremove()メソッドを呼び出すことによって、リストやマップなどからオブジェクトを削除することを常に考えなければなりません。
ヌルへの参照を設定するいくつかのアドバイスであることを用いる場合には、メモリ集約オブジェクトスコープ途中で使用されるように停止長い範囲に具体的でした。例えば:ここ
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; <-- explicitly set to null
doSomethingElse();
}
根拠はOBJがスコープ内に残っているので、その後の参照を明示的にヌル化せず、それはdoSomethingElse()メソッドが完了するまでごみ収集可能になっていないということでした。そしてこれは、が現代のJVMのにはおそらく存在しないとのアドバイスです.JITコンパイラは、特定のローカルオブジェクト参照が使用されなくなった時点でうまくいくことが分かります。
それをプロファイルします。現代のランタイムでは、パフォーマンスやメモリ占有量の意味のある増加は見られません。 –
@Jason、プロフィール?これは、十分な結果セットを得るために十分な大きさのケースをプロファイルして、これに答えることを前提としています。そして、私はVMがgcとパフォーマンスの問題を隠すのに十分最適化されているケースを選びません。だから私はここでこれを求めている。これが問題である場合の感覚を得る。 – sal
http://stackoverflow.com/questions/449409/does-assigning-objects-to-null-in-java-impact-garbage-collectionの重複。 –