JVM堆内存溢出后,其他线程能继续工作吗

这篇“JVM堆内存溢出后,其他线程能继续工作吗”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JVM堆内存溢出后,其他线程能继续工作吗”文章吧。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、虚拟主机、营销软件、网站建设、万载网站维护、网站推广。

先说一下答案,答案是还能运行

代码如下:

public class JvmThread {

   public static void main(String[] args) {
       new Thread(() -> {
           List list = new ArrayList();
           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();
   }
}

结果展示:

Wed Nov 07 14:42:18 CST 2018Thread[Thread-1,5,main]==
Wed Nov 07 14:42:18 CST 2018Thread[Thread-0,5,main]==
Wed Nov 07 14:42:19 CST 2018Thread[Thread-1,5,main]==
Wed Nov 07 14:42:19 CST 2018Thread[Thread-0,5,main]==
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space
at com.gosaint.util.JvmThread.lambda$main$0(JvmThread.java:21)
at com.gosaint.util.JvmThread$$Lambda$1/521645586.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
Wed Nov 07 14:42:20 CST 2018Thread[Thread-1,5,main]==
Wed Nov 07 14:42:21 CST 2018Thread[Thread-1,5,main]==
Wed Nov 07 14:42:22 CST 2018Thread[Thread-1,5,main]==

JVM启动参数设置:

JVM堆内存溢出后,其他线程能继续工作吗

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

以上就是关于“JVM堆内存溢出后,其他线程能继续工作吗”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。


本文名称:JVM堆内存溢出后,其他线程能继续工作吗
转载注明:http://cdiso.cn/article/gipgdg.html

其他资讯