jvm堆内存溢出后,其他线程是否可继续工作

当一个线程在JVM堆内存溢出后,其他线程可能仍能继续工作。文章通过实验和日志分析发现,发生OOM的线程会终止,释放其持有的对象,允许GC清理内存。尽管其他线程可能在某些情况下继续运行,但频繁的GC会对系统性能产生影响。总结来说,内存溢出是否影响其他线程取决于具体场景,通常溢出线程会结束并释放内存。
摘要由CSDN通过智能技术生成

直接实验验证
在这里插入图片描述
日志输入:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从日志可以看出在thead-0发生OOM之后,thread-1仍旧能够继续申请内存工作。使用jconsole监控发现,thread-0开始慢慢把heap压满,发生OOM之后神奇的事情发生了,heap基本上被清空了,通过查看jconsole看到的线程信息,发现没有thead-0线程了。这就很明确了,因为thead-0没有捕获该异常,跳出了while循环,导致thead-0线程运行结束,该线程持有的对象也就能被释放了。
那如果thread-0发生了OOM,但是该线程仍旧存活并且持有这些对象会怎么样呢?
在这里插入图片描述
在线程thread-0我们捕获了该ERROR,然后让该线程暂停(不要让他结束&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值