>本文探讨OOM是否导致JVM退出,结论是不一定。OOM通常只杀死当前线程,若有其他非守护线程,JVM会继续运行。但在生产环境中,推荐使用JVM参数让其在OOM时快速失败并重启。 这是一个非常经典且重要的问题。 核心答案:不一定。OOM (OutOfMemoryError) 不一定会直接导致 JVM 退出。 具体情况取决于 OOM 发生的内存区域、发生在哪个线程以及是否有相应的处理机制。 --- 让我们深入分析一下几种情况: 1. JVM 不会退出的情况 这是最常见的情况。 本质上是一个 类型的可抛出对象(),就像 一样。它是在某个特定线程的执行过程中被抛出的。 关键点:OOM 通常只“杀死”当前线程。 如果一个线程在尝试分配内存时触发了 OOM,并且这个错误没有被任何 块捕获,那么该线程会因“未捕获的异常”而终止。 但是,如果 JVM 中还有其他非守护(non-daemon)线程正在运行,JVM 进程本身会继续运行。 典型例子: 假设你有一个 Web 服务器(如 Tomcat),它为每个请求分配一个工作线程。 1. 一个用户的请求(线程A)尝试加载一个巨大的文件到内存中,导致了...