閉じて、Javaでオブジェクトを「破壊」する権利をどのようにあります

Fagam32:

私は地図を持っています

public class MyMap implements Map<String,String>

これは、DB内のいくつかのものをして、それが次のいずれかを実行しなければならない破壊する方法を:

  1. ガベージコレクタはなしMYMAPを破壊した場合close()、それが実行すべきよりもclear()方法を
  2. オブジェクトは、後に破壊した場合close()、すべてのデータをDBに保存されますよりも、

これは、てFileWriterのように動作するはずです。お近くのストリーム場合 - データが保存されますあなたがいない場合、 - あなたが失う:(

私は何を使うべきでしょうか?finalize()、単純に実装するCloseableか、AutoCloseableまたは何か違うのですか?

Dnlst:

finalize()されたJava 9から非推奨VMが終了した場合には呼び出されない可能性があります:あなたはコールした場合Runtime.runFinalizersOnExit(true)、それが実行されます(ただし、これと他の問題があります)。

代わりに、実装する必要がありますAutoClosable

これは自動的に閉じることができますMaptry-with-resources

することもできます、あなたの中にメソッドとして実装(さえ)すぎ。close()FileWriterclose()FileWriterCloseableAutoCloseable

あなたがしたい場合は、上書きすることができfinalize()終値は、私の元の状態として正しく動作しますが、パフォーマンスの問題の世話をし、以下のなかった場合のバックアップの方法を:

  • 常に呼び出す  super.finalize() あなたに  finalize() 方法。
  • で、タイムクリティカルなアプリケーションロジックを入れないでください  finalize()その予測不可能性を見て、。
  • 使用しないでください  Runtime.runFinalizersOnExit(true); 、それは危険であなたのシステムを置くことができるよう。
  • システムはそれらを無視するよう自分で例外をキャッチしてログインします。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=478474&siteId=1