finalize
オブジェクトがガベージ コレクションの対象であると JVM が判断した後、Java のメソッドが呼び出されます。これがいつ発生するか、またはプログラムが終了する前に発生するかどうかについて、実際の保証はありません。私の質問は、実際にガベージ コレクションされたオブジェクトに対して呼び出されることfinalize
が保証されているかどうかです。世代別 GC の最も若い世代のオブジェクトについて具体的に考えています。
世代別 GC では、ライブ オブジェクトのみが走査され、新しい空間にコピーされる単純なマーク スイープ コレクションを使用して、最も若い世代が GC されることがよくあります。したがって、最も若い世代のガベージは実際にはトラバースされません。finalize
また、ガベージがトラバースされない場合、ガベージになるオブジェクトに対して が呼び出されることをどのように保証するのでしょうか? a) 最年少世代でガベージになるこれらのオブジェクトに対して呼び出される保証がないfinalize
、または b)finalize
呼び出される保証はあるが、オーバーライドするオブジェクトfinalize
は何らかの方法で処理が異なるようです。