【发布时间】:2013-08-06 06:18:16
【问题描述】:
我知道you can't count on finalizers 可以清理你的烂摊子(即免费资源),但我想知道 - 当 JVM 正常终止时,java 对象是否会被 GC 处理/最终确定(System.exit() / 没有剩余线程)?
编辑:
所以,GC 不保证会被触发,因此finalize() 也不保证,但是 ReferenceQueue 会起作用吗?
【问题讨论】:
-
那是关于 CLR 的文档,而不是你链接到的 JVM
-
嗯,有
System.runFinalizersOnExit(),但它已被弃用。无论如何,当你退出一个进程时,最终清理的是操作系统。现在,为什么要问这个问题? -
也许您需要使用
Runtime.addShutdownHook()添加一些关机触发器!没有关于调用 finalize 的保证,如果系统调用了,也没有保证让 finalize 做它想做的一切。 -
@DenisTulskiy:这是一篇概念性文章。 fge:这是一个概念性的问题。但还有——我不想释放分配的资源(即删除文件)。用户:shutdownHook 可能是一个很好的解决方案。
-
那些是 cmets 而不是答案。随意不相信我:-)
标签: java garbage-collection jvm termination