JVM堆内存OOM后其他线程是否还可以正常运行
Posted enhance
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM堆内存OOM后其他线程是否还可以正常运行相关的知识,希望对你有一定的参考价值。
可以的,当一个线程出现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后其他线程是否还可以正常运行的主要内容,如果未能解决你的问题,请参考以下文章