码迷,mamicode.com
首页 > 编程语言 > 详细

JVM堆内存OOM后其他线程是否还可以正常运行

时间:2019-07-13 17:26:05      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:曲线   new   mic   com   ace   ack   线程二   col   catch   

可以的,当一个线程出现OOM后,他占用内存资源会立马释放掉

public class JvmThread {

    public static void main(String[] args) {
        new Thread(() -> {
            List<byte[]> list = new ArrayList<byte[]>();
            while (true) {
                System.out.println(new Date().toString() + Thread.currentThread() + "==");
                byte[] b = new byte[1024 * 1024 * 1];
                list.add(b);
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();

        // 线程二
        new Thread(() -> {
            while (true) {
                System.out.println(new Date().toString() + Thread.currentThread() + "==");
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

 

技术图片

。我们仔细观察一下在14:42:05~14:42:25之间曲线变化,你会发现使用堆的数量,突然间急剧下滑!这代表这一点,当一个线程抛出OOM异常后,它所占据的内存资源会全部被释放掉,从而不会影响其他线程的运行!

 

JVM堆内存OOM后其他线程是否还可以正常运行

标签:曲线   new   mic   com   ace   ack   线程二   col   catch   

原文地址:https://www.cnblogs.com/enhance/p/11099230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!