jvm退出的唯一条件就是虚拟机内不存在非守护线程。

今天遇到一次oom的情况,突然想到这个问题,之前脑子里根深蒂固的认为oom了,java进程一定会退出。实际上不是这样的。
OOM的发生表示了此刻JVM堆内存告罄,不能分配出更多的资源,或者gc回收效率不可观。一个线程的OOM,只会导致当前线程异常退出。在一定程度的并发下,若此时其他线程也需要申请堆内存,那么其他线程也会因为申请不到内存而OOM,甚至连锁反应导致整个JVM的退出。如果有非守护线程不申请内存,则会一直执行。
JVM退出和OOM没有直接的联系。