我已经创建了一个对象,它的finalize方法已经被覆盖,用来保存和关闭包含一些信息的文件。该对象被另一个对象弱引用。当GC发生时,我想保存对对象的一些更改。这就是为什么我重写了finalize的代码。
但是,当一个对象即将被垃圾回收时,finalize方法被调用。这可以在它有资格进行垃圾收集之后的任何时间进行。
我不想这样,我想在GC发生时立即调用finalize方法,并且不应该有任何延迟。有没有可以设置的jvm选项来实现这一点?我只能看到另一种方式是"System.runFinalization()",但这似乎很俗气??有没有更优雅的方式?
谢谢
发布于 2012-09-18 02:05:21
我想在GC发生时立即调用
方法,
你不能不使用内部API,我不建议你使用。
不应该有任何延迟。
总是有滞后的。仅仅关闭文件就需要几毫秒的时间。发生这种情况时,应用程序会冻结吗(因为应用程序可能会在GC运行时冻结)
有没有更优雅的方式?
如果您想要确定性地发生,请在使用完资源后将其关闭。
https://stackoverflow.com/questions/12464659
复制相似问题