0

ファイナライザーはJavaで呼び出されることが保証されていますか? JVM ごとに異なる場合、Dalvik VM for Android の場合はどうでしょうか。

4

3 に答える 3

4

いいえ、呼び出される保証はありません。リソースを解放するためにファイナライザーに依存しないでください。

https://www.securecoding.cert.org/confluence/display/java/MET12-J.+Do+not+use+ファイナライザー

于 2012-12-21T01:18:16.410 に答える
2

これは、スーパークラスとしてのJavaチュートリアルオブジェクトからの抜粋です。

finalize()メソッド

Objectクラスは、オブジェクトがガベージになったときに呼び出すことができるコールバックメソッドfinalize()を提供します。オブジェクトのfinalize()の実装は何もしません。finalize()をオーバーライドして、リソースの解放などのクリーンアップを行うことができます。

finalize()メソッドはシステムによって自動的に呼び出される場合がありますが、いつ呼び出されるか、または呼び出されたとしても、不確実です。したがって、クリーンアップを行うためにこの方法に依存しないでください。たとえば、I / Oの実行後にコード内のファイル記述子を閉じず、finalize()がそれらを閉じることを期待している場合、ファイル記述子が不足する可能性があります。

最後の段落は重要なものです。

于 2012-12-21T01:25:08.517 に答える