オブジェクトが Finalize メソッドを実装しているが、その内部でアプリケーションの有効な静的オブジェクトを参照しているとします (設計は悪いですが、非常に可能性があります)。
ここで、GC が開始され、オブジェクトをファイナライズ キューに入れてファイナライズし、FReachable キューに移動してファイナライズ メソッドを呼び出します。
しかし、おっ!生きているオブジェクトを参照していることがわかるため、GC がオブジェクトによって占有されているメモリを再利用できず、オブジェクトが再び生きているとマークされます。ゾンビのオブジェ!
この時点で、このオブジェクトはどこにありますか?
- Freachable のままですか?
- ファイナライズ キューに残っていますか?
- 不確定な状態でマネージド ヒープに残る (freachable およびファイナライズ キューから削除される)?
また、そのようなオブジェクトの ReRegisterForFinalize() に最適な場所は何ですか?