Java Finalizer方法和GC

时间:2012-09-17 17:54:01

标签: java garbage-collection weak-references finalize

我创建了一个对象,其顶级方法已被覆盖,以保存并关闭包含一些信息的文件。该对象是从另一个对象引用的弱对象。我希望在GC发生时保存对象的一些更改。这就是为什么我覆盖了finalize的代码。

但是,当一个对象即将收集垃圾时调用finalize方法。这可以在它有资格进行垃圾收集之后的任何时候。

我不想要这个,我想在GC发生时立即调用finalize方法,并且不应该有任何延迟。有没有我可以设置的jvm选项来实现这个? 我只能看到另一种方法是“System.runFinalization()”,但这看起来很俗气? 有更优雅的方式吗?

由于

1 个答案:

答案 0 :(得分:6)

  

我想在GC发生后立即调用finalize方法,

你不能不使用内部API我不建议你使用。

  

不应该有任何滞后。

总是有滞后的。关闭文件需要几毫秒。在发生这种情况时,您是否可以暂停应用程序(因为应用程序可以在GC运行时冻结)

  

有更优雅的方式吗?

如果要确定性地发生,请在完成后关闭资源。