Java で finalize() メソッドが呼び出されるのはいつですか? 質問する

Java で finalize() メソッドが呼び出されるのはいつですか? 質問する

いつになるか知りたいfinalize()メソッドが で呼び出されますJVM。 メソッドをオーバーライドして、メソッドが呼び出されたときにファイルに書き込むテスト クラスを作成しましたfinalize()。 実行されません。 実行されない理由を誰か教えてもらえますか?

ベストアンサー1

このfinalizeメソッドは、オブジェクトがガベージ コレクションされる直前に呼び出されます。これは、オブジェクトがガベージ コレクションの対象になった後であればいつでも可能です。

オブジェクトがガベージ コレクションされない (したがってfinalize呼び出されない) 可能性も十分にあることに注意してください。これは、オブジェクトがガベージ コレクションの対象にならない場合 (JVM の存続期間全体を通じてアクセス可能であるため)、またはオブジェクトが対象になった時点から JVM の実行が停止するまでの間にガベージ コレクションが実際に実行されない場合に発生する可能性があります (これは単純なテスト プログラムでよく発生します)。

まだ呼び出されていないオブジェクトに対してJVM を実行するように指示する方法はありますfinalizeが、それらを使用することはお勧めできません (その方法の保証もそれほど強力ではありません)。

finalizeアプリケーションの正しい操作に を頼っている場合、それは間違いです。は、(通常は Java 以外の) リソースのクリーンアップにのみ使用する必要finalizeがあります。これ、JVM が、どのオブジェクトに対しても が呼び出されることを保証しないからです。finalize

おすすめ記事