どこかで、Javaではstaticフィールドを持つクラスでもガーベッジコレクタに回収される可能性があるという話を聞いたことがあるのだが、リファレンスがみつからない。
一般的には自作クラスローダを使ってロードされたクラスにおいては、自作クラスローダがガーベッジコレクションに含まれて回収されると、staticフィールドを持ってるクラスでも自分をロードしたクラスローダと一緒に回収されてしまうらしい。これはある程度納得できる。
ある本には自己参照的な場合はstaticフィールドを持つクラスでも回収されるという説明があって、これはどうも納得がしにくい。そういう話だとstaticフィールドを持つクラスは実質的に使い物にならないという気がする。
真偽のほどを確認することができなかったので、この部分についての調査は断念して安全策でいくことにした。とりあえず、システムローダしか使わないアプリケーションでは問題がなさそうだ。
ピンバック: hiro345
おお、どうもありがとうです。その話です。 -noclassgc のキーワードまでは判っていたのですが、力尽きてました。サンキューです。
Singletonなんかがさくっと回収されてしまうclass garbage collectionですかね。”class garbage collection”でぐぐるといろいろでてきます。-noclassgcオプションで無効にできます。