2

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

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

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

谢谢

4

1 回答 1

6

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

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

不应该有任何滞后。

总是有滞后。仅关闭文件将花费数毫秒。发生这种情况时应用程序冻结是否可以(因为在 GC 运行时应用程序可能会冻结)

有没有更优雅的方式?

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

于 2012-09-17T18:05:20.870 回答