专栏首页程序员开发者社区一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么?

一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么?

这个问题的答案是 : 还能运行!

JVM 分析工具

jvisualVM工具强大 相当于 jstack jmap

也可以使用jstack pid

jstat -gcutil 查看gc 情况

命令参考http://guafei.iteye.com/blog/1815222

生产的jvisualVM可能就不好用了,可以使用:

jmap -dump:live,format=b,file=m.hprof <PID>

导出dump文件,然后使用MAT工具进行分析

你会发现使用堆的数量,突然间急剧下滑!这代表着一点,当一个线程抛出OOM异常后,它所占据的内存资源会全部被释放掉,从而不会影响其他线程的运行!

给出测试代码:

import java.util.ArrayList; import java.util.Date; import java.util.List; public class JavaOOM4Thread { /** * 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么? 答案是 还能运行 -Xms20m -Xmx20m * -XX:+HeapDumpOnOutOfMemoryError * @param args */ public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { 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 (InterruptedException e) { e.printStackTrace(); } } } }).start(); new Thread(new Runnable() { @Override public void run() { while (true) { System.out.println(new Date().toString() + Thread.currentThread() + "=="); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } }

本文分享自微信公众号 - 程序员开发者社区(gh_016ffe40d550)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RabbitMQ启动出现的问题与解决办法

    尝试下面的操作: 禁用 SELinux ,修改 /etc/selinux/config SELINUX=disabled

    王小明_HIT
  • MYSQL 下 count(*)、count(列)、 count(1) 理解

    cout(*)和count(1) 没区别,但是cout(列名) 不统计为 null 的

    王小明_HIT
  • synchronized 和 ReentrantLock 有什么区别?

    Synchronized 是 Java 内建的同步机制,所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取...

    王小明_HIT
  • C# 多线程

     Thread类的使用: 初始化: Thread th1 = new Thread(function1); Thread th2 = new Thread(ne...

    小端
  • 线程的其他特征

    睡眠: //使用sleep控制线程运行 public class Test9 { /** * @param args */ ...

    汤高
  • 在.NET Core 里使用 BouncyCastle 的DES加密算法

    .NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章《使用 JavaScriptService 在.NET Core ...

    张善友
  • ASP.NET Core 给上传的图片加水印

    图片加水印是网站中使用非常广泛的技术,可以保护网站内容的版权,例如我博客这样的网站。在传统ASP.NET(.NET Framework)中,我们可以使用Syst...

    Edi Wang
  • win10 uwp 获得缩略图 文件缩略图视频小图

    有时候需要获得文件或视频的缩略图。 本文提供两个方法,用于获得文件的缩略图和截取视频指定时间的显示图片。

    林德熙
  • synchronized到底锁住的是谁?

    10 public static void main(String[] args) throws InterruptedException {

    java架构师
  • synchronized到底锁住的是谁?

    本文代码仓库:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/s...

    用户1148394

扫码关注云+社区

领取腾讯云代金券