gpt4 book ai didi

java - 关闭 Hook 与终结器方法

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:36 24 4
gpt4 key购买 nike

我只是不明白为什么必须使用 Runtime.addShutdownHook。如果你想在 jvm 退出时做一些清理,为什么不直接重载守护进程类的 finalize 方法。使用 shutdown hook 相对于 finalize 方法有什么优势。

还有一个已弃用的函数 runFinalizersOnExit。如果我将它设置为 false,我相信终结器将不会运行。这与 java 保证终结器总是在垃圾回收之前运行相矛盾。

最佳答案

不能保证终结器永远运行。 finalize() 在对象被垃圾回收时调用。但是当程序运行时,垃圾收集器可能不会收集任何东西。

相比之下,关闭 Hook 在 jvm 正常退出时运行。所以即使这也不是 100% 保证,但它非常接近。只有少数情况下关闭 Hook 不会运行。

编辑我查看了未执行关闭 Hook 的边缘情况

关闭 Hook 已执行:

  • 当所有的 JVM 线程都执行完毕
  • 因为调用了 System.exit()
  • 因为用户按下了 CNTRL-C
  • 系统级关闭或用户注销

关闭 Hook 执行:

  • 如果 VM 由于 native 代码错误而崩溃,则无法保证 Hook 是否会运行。
  • 如果在 Linux 上使用 -kill 命令或在 Windows 上使用 Terminate Process 杀死 JVM,则 JVM 会立即退出

关于java - 关闭 Hook 与终结器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20829228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com