如果JVM崩溃,Shutdownhook是否保证执行?

9

看起来连Javadoc都没看过... - Didier L
2
如果您关闭了计算机,那么可以保证 JVM 之外的世界不会再发生任何事情。结论:JVM 无法控制 JVM 之外的世界。 - tb-
你是指JVM崩溃吗?不是。如果你是指异常后的关闭,那么它们应该运行。大多数时候,当人们谈论JVM崩溃时,他们指的是程序抛出了异常或错误。 - Peter Lawrey
2个回答

11
不行。来自文档

在极端情况下,虚拟机可能会中止运行,也就是说,在没有正常关闭的情况下停止运行。这种情况发生在虚拟机被外部终止时,例如在Unix上使用SIGKILL信号或在Microsoft Windows上使用TerminateProcess调用。如果本地方法出现问题,例如破坏内部数据结构或尝试访问不存在的内存,则虚拟机也可能中止运行。如果虚拟机中止运行,则无法保证是否会运行任何关闭挂钩。

(强调属于我)


1

ShutdownHook会为JVM开始关闭之前需要完成的任务创建一个线程,但如果机器本身关闭了,由shutdownhook创建的线程将永远无法获得CPU周期以执行它们,我认为在这里,shutdownhook将不会被执行...


你问的是JVM崩溃会发生什么,而不是计算机被强制关闭会发生什么。在后一种情况下,我认为直观地看,即使断电后也不会执行任何操作(甚至包括关机挂钩)。 - nneonneo
嘿,谢谢!我正在研究JVM崩溃的可能情况。 - kanojia_chandrashekhar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接