Java Finalizer方法和GC

use*_*185 2 java garbage-collection weak-references finalize

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

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

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

谢谢

Pet*_*rey 6

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

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

不应该有任何滞后.

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

有更优雅的方式吗?

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

  • +1"如果要确定性地发生,请在完成后关闭资源." (2认同)