JSゆるふわめも

がっこうでべんきょうしたことをめもがきしてます

ファイナライザを避ける

ファイナライザ

GCによって、インスタンスが回収されるタイミングで実行されるメソッド

ファイナライザは(原則)使用するべきでは無い

理由

  • ファイナライザは即時実行されるわけでは無い(意図しないタイミングで実行される可能性がある)
  • そもそも実行されることが保証されていない

ファイナライザ相当のことをしたい場合

  • 明示的にコールする後処理メソッドを書く
    • terminate, dipose, etc…
  • 上記メソッドがコールされたことを管理するフィールド値をオブジェクトに持たせる
    • isTerminated, isDisposed

参考: ExecutorService (Java Platform SE 6)

ファイナライザの使い所は?

上記メソッドを呼び出し忘れた時の保険

実装する場合の注意点

親クラスでファイナライザが実装されている場合、忘れずに呼び出すこと

  • かなり簡略化しているので、正確完全な情報はEffective Java原本を参照してください