未使用のオブジェクト参照をnull
Javaに割り当てると、ガベージコレクションプロセスが測定可能な方法で改善されますか?
私のJava(およびC#)の経験から、仮想マシンやJITコンパイラーを試してみると直感に反することが多いことがわかりましたが、同僚がこの方法を使用するのを見てきました。アップまたはそれらのブードゥー教プログラミング迷信の1つ?
通常はありません。
しかし、すべてのもののように:それは異なります。最近のJavaのGCは非常に優れており、到達できなくなった直後にすべてをクリーンアップする必要があります。これは、ローカル変数のメソッドを終了した直後で、クラスインスタンスがフィールドで参照されなくなったときです。
明示的にnullにする必要があるのは、他の方法で参照されたままになることがわかっている場合のみです。たとえば、保持されている配列。配列の個々の要素が不要になった場合は、それらをnullにすることができます。
たとえば、ArrayListの次のコード:
public E remove(int index) {
RangeCheck(index);
modCount++;
E oldValue = (E) elementData[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
return oldValue;
}
また、オブジェクトを明示的にnullにしても、参照が残っていない限り、オブジェクトがスコープ外になった場合よりも早くオブジェクトが収集されることはありません。
両方とも:
void foo() {
Object o = new Object();
/// do stuff with o
}
そして:
void foo() {
Object o = new Object();
/// do stuff with o
o = null;
}
機能的に同等です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加