前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【八股文Java】: OOM后,JVM一定会退出吗?为什么?

【八股文Java】: OOM后,JVM一定会退出吗?为什么?

作者头像
崔认知
发布2023-10-20 15:36:23
2700
发布2023-10-20 15:36:23
举报
文章被收录于专栏:nobodynobody

问:OOM后,JVM一定会退出吗?为什么?

答:OOM后,JVM不一定退出。

JVM退出的条件是:所有非守护线程退出,或者某些异常导致操作系统杀死当前进程。

OOM异常也是Java异常的一种,默认情况下,如果是某个线程抛出异常,此线程会退出,并且异常堆栈会输出到控制台。如果JVM所有的非守护线程都因为OOM异常或者其他异常退出,那么JVM就会退出

进程是资源分配的单位,线程是资源调度的基本单位。

JVM中异常的处理都会和线程绑定,也就是说线程也起到了故障隔离作用,如下图:

Java中线程抛出了异常且导致退出时,如果我们不处理异常,会有默认的java.lang.Thread.UncaughtExceptionHandler处理。如果当前线程没有配置UncaughtExceptionHandler,会有线程组(ThreadGroup)兜底处理(线程退出后,会将异常堆栈输出到控制台)

代码语言:javascript
复制
java.lang.Thread#getUncaughtExceptionHandler

当然,线程是宝贵的资源,一般以线程池的方式使用,我们需要自己处理异常,不要让线程退出,避免重复创建线程

附:

模拟OOM,一个线程OOM后退出,其他线程正常运行:

运行结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 认知科技技术团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档