ガベージコレクション対象となるタイミング

ガベージコレクション対象になる、すなわちオブジェクトがファイナライズ可能になるタイミングは、参照が到達できなくなったタイミング(厳密には弱く到達可能以下になったら)。

普通、nullになるか、スコープ外になるまでは参照可能と思うが、スタック上にある参照に関しては要注意。すなわち、ローカル変数かパラメーターに保存されている参照は、ガベージコレクタの最適化によって、ソースコード上でnullを入れたり、単純にリターンするタイミング以外でファイナライズ対象になることがある。

一方、フィールド、内部クラスのインスタンスに関しては、ソースコード上で参照可能であれば、到達可能であることが保証されている。まぁ、この辺の最適化はワンダーランドなのであまり深く追求する状況には遭遇したくないね。原則、finalizeメソッドは書くなって言われているぐらいだし。

参考:プログラミング言語Java第4版406ページ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です