[解決済み] Javaオブジェクトをnullにすることはもう意味がないのでしょうか?
質問
古い本を見ていたら、Peter Hagger の "Practical Java" を見つけました。パフォーマンスのセクションで、オブジェクト参照を
null
に設定することを推奨しています。
Javaでは、オブジェクト参照を
null
に設定することで、パフォーマンスやガベージコレクションの効率は向上しますか?もしそうなら、どのような場合に問題になるのでしょうか?コンテナ・クラス?オブジェクトの構成?匿名の内部クラス?
私はコードでこれをかなり頻繁に見ます。これはもう時代遅れのプログラミングのアドバイスなのでしょうか、それともまだ役に立つのでしょうか?
どのように解決するのですか?
あなたがいつ参照をnullにしようと思ったかに少し依存します。
オブジェクト チェーン A->B->C がある場合、いったん A に到達できなくなると、A、B、C はすべてガベージ コレクションの対象になります (B または C のいずれかを参照しているものが他にないと仮定します)。たとえば、参照 A->B または B->C を明示的に null に設定する必要はありませんし、これまでもそうでした。
それは別として、ほとんどの場合、現実にはコレクション内のオブジェクトを扱っているので、この問題は本当に発生しません。一般的には、適切な remove() メソッドを呼び出すことで、リストやマップなどからオブジェクトを削除することを常に考えているはずです。
がある場合 があった場合 において、参照を null に設定するようにというアドバイスがありました。 長いスコープで、メモリを大量に消費するオブジェクトがスコープの途中で使われなくなった場合です。 . たとえば
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; <-- explicitly set to null
doSomethingElse();
}
ここでの根拠は、なぜなら obj がまだスコープ内にあるため、 明示的に参照を NULL 化しないと、その後に doSomethingElse() メソッドが完了するまでガベージコレクタになりません。そして、これは以下のようなアドバイスです。 おそらく最近のJVMではもはや通用しない JIT コンパイラーは、与えられたローカルオブジェクトの参照がもはや使用されないどの時点であるかを見つけ出すことができることが判明しました。
関連
-
[解決済み】.NETのNotImplementedExceptionのようなものがJavaにあるのか?
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
ApplicationContextの起動エラーです。条件レポートを表示するには、アプリケーションを'de'で再実行します。
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Javaでよくある構文エラー
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
java.sql.SQLException: 結果セットの開始前
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
アノテーション「@Retention」の役割
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
Java の double データ型における 0.0 と -0.0 の問題
-
htmlとwordの相互変換の実装(画像あり)