インスタンスフィールド、配列要素
オブジェクトへの参照がある場合、そのオブジェクトはガベージコレクションできません。特に、そのオブジェクト(およびその背後にあるグラフ全体)が大きい場合、ガベージコレクションを停止している参照は1つしかなく、その参照はもう必要ありません。これは不幸な状況です。
病理学的なケースは、それを構成するために使用されたXML DOMツリー全体への非必須インスタンスを保持するオブジェクト、登録解除されなかったMBean、またはクラスローダー全体がアンロードされないようにするアンデプロイされたWebアプリケーションからのオブジェクトへの単一参照。
したがって、参照自体を保持するオブジェクトがとにかく(またはそれでも)ガベージコレクションされることが確実でない限り、不要になったすべてのものをnullにする必要があります。
スコープ付き変数:
スコープの終了前にローカル変数をnullに設定して、ガベージコレクターによって再利用され、「今後は使用不可」とマークできるようにする場合は、代わりに、より限定されたスコープに配置することを検討してください。 。
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; // <-- explicitly set to null
doSomethingElse();
}
なる
{
{
BigObject obj = ...
doSomethingWith(obj);
} // <-- obj goes out of scope
doSomethingElse();
}
長くて平らなスコープは、一般的にコードの読みやすさにも悪影響を及ぼします。その目的のためだけに物事を分割するプライベートメソッドを導入することも、前例のないことではありません。