java 工作线程内存溢出(OOM)!进程内的其他线程还会继续工作吗?

本文探讨了Java工作线程出现内存溢出(OOM)时,是否会影响进程内其他线程的问题。通常认为,堆内存溢出会导致所有线程停止工作,但实验结果显示,一个线程抛出OOM异常后,其占用的内存被释放,而其他线程仍能继续运行,尽管进程无法恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 工作线程OOM,其他线程会怎么样?进程会死掉吗

初看到这一问题,觉得这题是在考察JVM的内存结构。我第一反应是OOM的常见情况堆溢出,也就是下面的这种异常

java.lang.OutOfMemoryError: Java heap space

默想如下

在多线程环境下,每个线程拥有一个栈和一个程序计数器。栈和程序计数器用来保存线程的执行历史和线程的执行状态,是线程私有的资源。其他的资源(比如堆、地址空间、全局变量)是由同一个进程内的多个线程共享。

所以按照这个思路去思考的话,看到这个题目首先就会想到 如果堆内存是共享的话,那么单独的子线程内存溢出也就是堆占用满了 其他线程自然也就不能工作了。然后实验结果却不是这样

开始实验

编译工具:IDEA
内存检测工具:VisualVm

基本参数设置如下:

-mx80 -XX:MaxPermSize=50m
最大可用的堆内存是80M 最大可使用的非堆内存是50m按需分配

测试参数设置

测试代码如下

        public static void main(String[] args) {
   
   

        long memory = Runtime.getRuntime().maxMemory();
        System.out.println(String.format(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值