Javaでやってはいけないこと – finalizeメソッド




データベース接続の解放など、終了処理をいろいろと書きたいケースは多々あります。
Javaには、Objectクラスにfinalizeメソッドを持ってます。
ですが、finalizeをオーバーライドして、これらの終了処理を書いてはいけません。

finalizeメソッドは、ガーベージコレクションが走る際に実行されるため、いつ呼ばれるかわかりません。
(private変数だからと言って、メソッドを抜けた際に走るわけではありません。)
また、必ずしも、finalizeメソッドは呼ばれる保証がありません。

ダメな例

この例では、少なくともガーベージコレクションが走るまで、接続が解放されないため、コネクションプールの取得待ち等で、永遠に処理が待ち続ける可能性があります。

修正例




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

10 + six =