[Java]side-effect from finalize
SingletonやTypeSafeEnumなどのパターンとシリアライズが相性が悪いことを前に書いた。
そこでは、readResolve
メソッドを実装することを書いたが、readResolve
の実装には一つ注意点がある。
readResolve
でオブジェクトを置き換えるようにすると、ObjectInputStream
の利用側にはデシリアライズされたオブジェクトは公開されなくなる。
しかし、VMとファイナライザはreadREsolve
メソッドが破棄したオブジェクトを認識しているため、次回のGCでObject#finalize()
が呼び出されることになる。
リソースの開放などをfinalize
に書いている場合、readResolve
によって破棄されたオブジェクトが悪さをしないように注意する必要がある。
ラベル: Java
0 件のコメント:
コメントを投稿
登録 コメントの投稿 [Atom]
<< ホーム