java 发生oom进程是否会挂掉

java发生oom时候进程是否挂掉?

运行参数:-Xms10m -Xmx10m

1 主线程main发生oom,进程挂掉

主线程oom

2 其他线程发生oom,发生oom的线程会挂掉。main线程继续。

发生oom的线程挂掉

thread发生了oom,但是主线程还在继续打印thread的状态。

3 发生oom的线程会死亡,其他线程继续。

thread发生oom,thread1 和main线程还在继续。

总结:java中发生oom时,发生oom的线程会死亡,其他线程会继续执行。如果主线程发生oom,进程挂掉

但是其他线程还是会受到影响,比如发生oom的线程占用了很多内存,导致内存不足,这样其他线程创建大的内存的时候也会发生oom。(这里并不是一定会发生,比如线程1发生oom死亡,线程2再去创建的时候,线程1的空间被回收,这样线程2就有空间创建对象,继续操作)

两个线程都死亡的情况:

2个线程都死亡

这里thread和thread1都死亡。

thread进行9次循环,占用内存9m。这个时候thread1去创建一个2m的数值,内存不够,发生gc。这个时候thread占用的空间回收不掉(被list引用)。那么thread1就发生oom异常。如果thread先发生oom异常,这个时候thread1再去创建对象,内存不够,发生gc,这个时候thread中list引用的对象被回收,thread1再去创建对象,可以创建成功,不会发生oom。那么thread1就不会死亡。

你可能感兴趣的:(java 发生oom进程是否会挂掉)