3

重複の可能性:
Javaオブジェクトをnullに設定すると、もう何もしませんか?

メソッドで同じ変数を何度も使用し、それを新しいオブジェクトに何度も参照しています。ガベージコレクションの観点から、新しいオブジェクトを参照させる前に無効にすることをお勧めします。

例:

StopWatch watch = new StopWatch();
watch.start();
//some code
watch.stop();
//some code
watch = null;
watch = new StopWatch();
watch.start();
//some code
watch.stop();
//some code

この場合、それを無効にすることがGCに違いをもたらすかどうかはわかりません。ご案内ください。

ありがとう!

4

4 に答える 4

7

その変数にすぐに新しい値を代入するため、その時点で代入nullしても違いはありません。

null変数への代入に関して、Java には「魔法のような」ものは何もありません。オブジェクトがすぐにガベージ コレクションされるわけではありません。問題のオブジェクトに到達できる(おそらく)多くの「パス」の1つを壊しているだけです。次の GC の実行前にパスが自然に壊れたり消えたりする場合、割り当てはnull何も達成しません。

通常、Java で変数やフィールドを null にする価値はありません。また、ローカル変数が上書きされようとしている、またはスコープ外に出ようとしている場合、それを行う価値はありません。

于 2013-01-07T07:44:12.327 に答える
2

オブジェクトがガベージ コレクションに使用できる場合、JVM はそのオブジェクトに null 値を割り当てます。

通常、Java で変数やフィールドを null にする価値はありません。また、ローカル変数が上書きされようとしている、またはスコープ外に出ようとしている場合、それを行う価値はありません。

于 2013-01-07T09:39:50.937 に答える
2

いいえ、この場合無効化しても違いはありません。

すぐに他の変数に割り当てられていなければ、違いがあったでしょう。その場合、参照が範囲外になるのを待つ代わりに、オブジェクトは GC の対象になります。

GC は通常、参照を持たないオブジェクトを収集します。メモリ内の他のオブジェクトへの参照を指しているため、前のオブジェクトへの参照はとにかく失われます。したがって、 null を割り当てても割り当てなくても違いはありません。

ガベージ コレクション プロバイダーで使用できますが、他に参照はありません。

于 2013-01-07T07:52:21.517 に答える
1

無効にした後すぐに新しいオブジェクトを割り当てるため、違いはありません。

于 2013-01-07T07:43:45.117 に答える