私は多くの新人のJavaの質問を読んでいて、finalize()
finalize()がリソースをクリーンアップするための信頼できない方法であることを誰も実際に明らかにしていないことは、ちょっと困惑していることがわかりました。Connectionsをクリーンアップするためにそれを使用するという誰かのコメントを見ました。Connectionがクローズされているという保証に近づく唯一の方法は、最終的にtry(catch)を実装することなので、これは本当に怖いです。
私はCSで教育を受けていませんでしたが、私はプロとしてJavaで10年近くプログラミングしておりfinalize()
、実稼働システムに実装されている人を見たことがありません。これはまだそれがその用途を持たない、または私が一緒に働いた人々がそれを正しくやってきたということを意味しません。
だから私の質問は、finalize()
言語内の別のプロセスまたは構文を介してより確実に処理できない実装のユースケースは何ですか?
この質問の意図ではないため、特定のシナリオまたは経験を提供してください。単にJavaの教科書を繰り返すか、ファイナライズの使用目的だけでは十分ではありません。
finalize()
。ただし、呼び出し元に代わってネイティブリソースを管理するなどのプラットフォームライブラリコードは、SocketInputStream
リソースリークのリスクを最小限に抑えるようにしています(またはPhantomReference
、後で追加されたのような同等のメカニズムを使用しています)。 、開発者の99.9999%が作成することはありません。