ファイナライザーはデストラクタではなく、ファイナライザーは役に立ちません。
私が聞いたところによると、多くのJavaリソースオブジェクトは「万が一に備えて」finalize()で処理します。
これは、バグにつながる可能性のある過度に寛容な態度のようです。
少なくとも、ファイナライズしてエラーをログに記録し(ファイナライズ時に未廃棄のリソース)、それらを標準出力に出力してから廃棄することをお勧めします。
より制限的な態度は、代わりに例外をどのように処理するかということかもしれません。このような制限のあるリソースオブジェクトを実装する必要はありませんが、その方法を知りたいと思います。
ただし、Javaでは、ファイナライザーでスローされた例外は無視されます(それ以外の場合、オブジェクトはリストに戻されて再度ファイナライズされます)。このようなものを実装する方法はありますか?おそらく、オブジェクトを作成したスレッドがまだ存在する場合はファイナライザーからの例外を与える方法(または存在しない場合は親スレッド?
また!!!!!他のgc言語(特にC#、pythonなど)は、リソースのファイナライズをどのように処理しますか(通常、リソースクラスの「万が一の処分」を実装しますか?)、ファイナライザーからスローし、他のスレッドに例外を与えます。(注:disposeメソッドを呼び出すために砂糖を使用したり、リソースを自動的に閉じるクロージャーを受け入れるメソッドを使用したりすることはあまり気にしません。ファイナライザーが果たす役割とファイナライザーからのエラー伝播に興味があります)。