Java Finalizer 方法和 GC

标签 java garbage-collection weak-references finalize

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

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

我不想这样,我想GC一发生就调用finalize方法,不能有任何滞后。我可以设置任何 jvm 选项来实现这个目标吗? 我只能看到另一种方式是“System.runFinalization()”,但这似乎很俗气? 有没有更优雅的方式?

谢谢

最佳答案

I want to call the finalize method as soon as GC happens,

如果不使用内部 API,我不建议您使用。

there should not be any lag.

总是有延迟。仅仅关闭文件就需要很多毫秒。当发生这种情况时,您是否可以接受应用程序卡住(因为应用程序可能会在 GC 运行时卡住)

Is there a more elegant way?

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

关于Java Finalizer 方法和 GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464659/

相关文章:

java - 使用 Java 8 将 List<T> 转换为 Map<T, U>

java - 错误 : "Duplicate files during packaging of APK"

c# - 缓存字符串需要担心吗?

php - PHP 何时在长时间运行的脚本中运行垃圾收集?

java - 了解弱引用

java - 如何在 Ubuntu 上使用 Open JDK 1.9 在 ubuntu 上安装 sbt 0.13.8 或最新版本

java - RecyclerView GridLayoutManager 和动态行高

java - 帮助处理非常奇怪的 Java GC 行为

ios - swift:弱不能应用于导出

c# - 弱引用已死