java进程老挂掉_java 发生oom进程是否会挂掉

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

运行参数:-Xms10m -Xmx10m

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

b75f60e0c93f

主线程oom

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

b75f60e0c93f

发生oom的线程挂掉

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

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

b75f60e0c93f

b75f60e0c93f

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

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

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

两个线程都死亡的情况:

b75f60e0c93f

2个线程都死亡

这里thread和thread1都死亡。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值