質問:
Java で、プログラムのセットアップ:
class MyUtils { private static MyObject myObject = new MyObject(); /*package*/static boolean doStuff(Params... params) { // do stuff with myObject and params... } }
次の場合、myObject はガベージ コレクションの対象になりますか?それはもう必要ありません、それともプログラムの存続期間全体にわたって存続しますか?
答え:
静的フィールドは、クラスがロードされている間はガベージ コレクションの対象になりません。これらは、そのクラスのロードを担当するクラスローダー自体がガベージコレクションされている場合にのみ収集できます。
Java 言語仕様 (JLS) セクション 12.7「クラスとインターフェイスのアンロード」によると:
"クラスまたはインターフェイスは、その定義クラス ローダーがガベージ コレクターによって再利用される場合にのみアンロードできます。[...]ブートストラップ ローダーによってロードされたクラスとインターフェイスはアンロードできない場合があります。"
したがって、提供された例では、クラス MyUtils がロードされている限り、myObject は存続します。 MyUtils をロードしたクラス ローダーもガベージ コレクションの対象となるまで、ガベージ コレクションの対象にはなりません。
以上がJava のガベージ コレクターは、「MyUtils」の「myObject」のような静的フィールドを再利用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。