Fagam32:
私は地図を持っています
public class MyMap implements Map<String,String>
これは、DB内のいくつかのものをして、それが次のいずれかを実行しなければならない破壊する方法を:
- ガベージコレクタはなしMYMAPを破壊した場合
close()
、それが実行すべきよりもclear()
方法を - オブジェクトは、後に破壊した場合
close()
、すべてのデータをDBに保存されますよりも、
これは、てFileWriterのように動作するはずです。お近くのストリーム場合 - データが保存されますあなたがいない場合、 - あなたが失う:(
私は何を使うべきでしょうか?finalize()
、単純に実装するCloseable
か、AutoCloseable
または何か違うのですか?
Dnlst:
finalize()
されたJava 9から非推奨。VMが終了した場合には呼び出されない可能性があります:あなたはコールした場合Runtime.runFinalizersOnExit(true)
、それが実行されます(ただし、これと他の問題があります)。
代わりに、実装する必要がありますAutoClosable
。
これは自動的に閉じることができますMap
しtry-with-resources
。
することもできます、あなたの中にメソッドとして実装(さえ)すぎ。close()
FileWriter
close()
FileWriter
Closeable
AutoCloseable
あなたがしたい場合は、上書きすることができfinalize()
終値は、私の元の状態として正しく動作しますが、パフォーマンスの問題の世話をし、以下のなかった場合のバックアップの方法を:
- 常に呼び出す
super.finalize()
あなたにfinalize()
方法。- で、タイムクリティカルなアプリケーションロジックを入れないでください
finalize()
その予測不可能性を見て、。- 使用しないでください
Runtime.runFinalizersOnExit(true);
、それは危険であなたのシステムを置くことができるよう。
- システムはそれらを無視するよう自分で例外をキャッチしてログインします。