You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java堆内存溢出(OOM)时会调用Shutdown Hook吗?

Java堆OOM与JVM中止、Shutdown Hook执行的关系

核心结论

堆内存耗尽抛出OutOfMemoryError时,JVM不会直接中止,这种错误的可恢复性足够强,通常能正常执行Shutdown Hook。

具体细节

  • JVM中止仅触发于两种场景:外部强制终止(如Unix系统的SIGKILL信号、Windows系统的TerminateProcess调用),或本地方法异常导致内部数据结构损坏/非法内存访问。堆OOM属于Java层面的受控错误,是JVM在内存分配失败时抛出的标准错误,不会破坏JVM核心内部结构,也不属于本地方法异常引发的中止场景。
  • 只要JVM进入正常关闭流程(哪怕是OOM后程序无法继续运行最终走向关闭),Shutdown Hook都会被执行。极端罕见的例外情况:如果OOM恰好发生在Shutdown Hook执行过程中,或者OOM导致线程完全无法调度,才可能影响钩子执行,但常规堆OOM场景下无需担心。
  • OutOfMemoryError是Error类型,但JVM并未强制要求程序必须退出。如果程序能捕获该错误并释放部分内存,理论上可继续运行;但实际多数场景下程序会无法正常工作,最终主动或被动退出,这个过程属于干净的关闭流程。

内容的提问来源于stack exchange,提问作者cozos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:50:50