当出现HeapDumpOnOutOfMemoryError错误时,我们需要分析原因,下面的程序就是模拟这个错误并导出dump文件,好让你分析

GcTest.java

package gc;
public class GcTest {private static final int _1MB= 1024 * 1024;  //约1mpublic static void main(String[] args) { //总共约8m多,堆大小设置不超过8388608B即8.388608m就会内存溢出,但是需要整数,小于8M就会重现这个错误byte[] a1, a2, a3, a4;  a1 = new byte[2 * _1MB];  a2 = new byte[2 * _1MB];  a3 = new byte[2 * _1MB];  a4 = new byte[2 * _1MB];  }
}

这个文件在桌面上,所以执行编译:

执行 GcTest.bat:

set CLASSPATH=C:\Users\andy\Desktop\gc;java -Xms10M -Xmx10M -Xmn2M -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\study\log_hprof\gc.hprof -XX:+PrintGCDetails -Xloggc:D:\study\log_gc\gc.log gc.GcTest
pause

结果如下:

gc.hprof文件用内存分析工具分析如mat打开 分析

User.java

package gc;import java.util.ArrayList;
import java.util.List;/** * @Package gc* @ClassName: User* @Description: TODO(这里用一句话描述这个类的作用)* @author andy* @date 2013-6-9 下午4:46:13*/
public class User {private String id;  private String name;  public String getId() {  return id;  }  public void setId(String id) {  this.id = id;  }  public String getName() {  return name;  }  public void setName(String name) {  this.name = name;  }  public User(String id, String name) {  super();  this.id = id;  this.name = name;  } public static void main(String[] args) {  List<User> list = new ArrayList<User>();  for (int i = 1; i < 10000; i++) {  User o = new User(i + "", System.currentTimeMillis() + "");  list.add(o);  o = null;  }  System.out.println("end");  try {  Thread.sleep(100000000l);  } catch (InterruptedException e) {  e.printStackTrace();  }  }
}

运行user任务管理器查看到的pid号:

基于jmap导出的堆信息:

用装了mat插件的eclipse打开firstHeap.bin文件

选择Leak Suspects Reports模式,finish

点击details

转载于:https://www.cnblogs.com/duanxz/p/4890447.html

JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))相关推荐

  1. JVM参数无效(-XX:+HeapDumpOnOutOfMemoryError设置无效)

    执行以下错误设置命令 java -XX:+PrintGCDetails -jar .\mgJavaNote-1.0-SNAPSHOT.jar -XX:+HeapDumpOnOutOfMemoryErr ...

  2. 段错误、内存泄漏、内存溢出、堆溢出、栈溢出

    参考:内存泄漏.内存溢出.段错误.堆溢出.栈溢出 作者:焦木白 发布时间:2019-10-22 网址:https://blog.csdn.net/jiaomubai/article/details/1 ...

  3. java栈堆溢出怎么解决_java内存溢出示例(堆溢出、栈溢出)

    堆溢出:/** * @author LXA * 堆溢出 */ public class Heap { public static void main(String[] args) { ArrayLis ...

  4. 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...

    内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区.堆.栈.本地方法栈.程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM.下面来分 ...

  5. jvm性能调优实战 - 43OOM内存溢出发生的原因及可能发生OOM的内存区域

    文章目录 OOM OOM是如何产生的 JVM进程怎么执行你写的那些代码 Java虚拟机栈:让线程执行各种方法 堆内存:放我们创建的各种对象 小结 OOM 先不考虑自己系统外部依赖的缓存.消息队列.数据 ...

  6. 解决java poi海量数据导出内存溢出问题

    找了很多天的解决方法,一直被分页查询绕进去了,其实数据都能查出来的,真正卡的地方是ExcelExportUtil类下调错了方法. 最开始调用的方法是(标记的地方):  workbook = new H ...

  7. java poi 图片 内存溢出_解决java poi海量数据导出内存溢出问题

    找了很多天的解决方法,一直被分页查询绕进去了,其实数据都能查出来的,真正卡的地方是ExcelExportUtil类下调错了方法. 最开始调用的方法是(标记的地方):  workbook = new H ...

  8. 五种内存溢出案例总结:涵盖栈深度溢出、永久代内存溢出、本地方法栈溢出、JVM栈内存溢出和堆溢出

    大家好,我是冰河~~ 相信小伙伴们在平时工作的过程中,或多或少都会遇到一个场景:内存溢出.如果你没有遇到过这个场景,那就说明你是个假的程序员.哈哈,开个玩笑,平时工作过程中,我们确实会遇到这个问题.今 ...

  9. linux虚拟机cpu高耗gc,Tomcat服务器-并发压力测试下调优注意点小结 JVM client模式和Server模式的区别 jvm 参数优化---笔记 tomcat查看GC信息...

    1.Tomcat conf中server.xml有个重要的性能配置,根据机器的硬件性能合理的配置常驻线程数以及最大线程数,还有等待队列线程数: connectionTimeout="1200 ...

最新文章

  1. 11、查看及测试网络、配置网络地址、内核及模块管理
  2. 拖拽插入Table的列(I.E. ONLY)
  3. 赛门铁克:“高度怀疑”WannaCry的幕后黑手是朝鲜
  4. python学习之面向对象(三)
  5. ARC下的所有权修饰符
  6. Java杂记3—流程控制之条件
  7. 【云栖大会】探索云时代下的游戏开发模式
  8. 创建、修改、删除表总结
  9. 了解机器学习框架CoreML
  10. MMKV_微信MMKV源码分析(一) | 整体流程
  11. “头疼”的俄罗斯开发者:不要再买我的软件了,收入不能提现
  12. php输出内容到页面,php实时输出内容
  13. 在Windows 7 Ultimate 64位上安装Java
  14. linux 路由跟踪命令_一文掌握linux系统路由跟踪指令traceroute
  15. 发布一个平滑进度条控件
  16. 在php里面加音乐,如何给视频添加音乐 视频配上背景音乐
  17. C++ Reference: Standard C++ Library reference: C Library: cwctype: wint_t
  18. OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发
  19. Web压缩问题-图片不显示
  20. Shell入门之管道

热门文章

  1. Coprime Sequence
  2. 字符串char与string转换
  3. 计算机组成原理—Cache和主存的映射模式
  4. [leetcode]1131. 绝对值表达式的最大值 ---曼哈顿距离,四角思维
  5. LuaForUnity2:Lua基本数据类型与符号
  6. GameObject.Find() 和 Transform.Find()的区别
  7. bzoj 1878: [SDOI2009]HH的项链(主席树)
  8. k8s安装部署Istio
  9. java执行cmd命令并获取返回结果字符串
  10. 环,模,补码,负数的表示与减法实现