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就不会死亡。