JVM参数之-XX:+HeapDumpOnOutOfMemoryError(导出内存溢出的堆信息(hprof文件))
当出现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文件))相关推荐
- JVM参数无效(-XX:+HeapDumpOnOutOfMemoryError设置无效)
执行以下错误设置命令 java -XX:+PrintGCDetails -jar .\mgJavaNote-1.0-SNAPSHOT.jar -XX:+HeapDumpOnOutOfMemoryErr ...
- 段错误、内存泄漏、内存溢出、堆溢出、栈溢出
参考:内存泄漏.内存溢出.段错误.堆溢出.栈溢出 作者:焦木白 发布时间:2019-10-22 网址:https://blog.csdn.net/jiaomubai/article/details/1 ...
- java栈堆溢出怎么解决_java内存溢出示例(堆溢出、栈溢出)
堆溢出:/** * @author LXA * 堆溢出 */ public class Heap { public static void main(String[] args) { ArrayLis ...
- 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...
内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区.堆.栈.本地方法栈.程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM.下面来分 ...
- jvm性能调优实战 - 43OOM内存溢出发生的原因及可能发生OOM的内存区域
文章目录 OOM OOM是如何产生的 JVM进程怎么执行你写的那些代码 Java虚拟机栈:让线程执行各种方法 堆内存:放我们创建的各种对象 小结 OOM 先不考虑自己系统外部依赖的缓存.消息队列.数据 ...
- 解决java poi海量数据导出内存溢出问题
找了很多天的解决方法,一直被分页查询绕进去了,其实数据都能查出来的,真正卡的地方是ExcelExportUtil类下调错了方法. 最开始调用的方法是(标记的地方): workbook = new H ...
- java poi 图片 内存溢出_解决java poi海量数据导出内存溢出问题
找了很多天的解决方法,一直被分页查询绕进去了,其实数据都能查出来的,真正卡的地方是ExcelExportUtil类下调错了方法. 最开始调用的方法是(标记的地方): workbook = new H ...
- 五种内存溢出案例总结:涵盖栈深度溢出、永久代内存溢出、本地方法栈溢出、JVM栈内存溢出和堆溢出
大家好,我是冰河~~ 相信小伙伴们在平时工作的过程中,或多或少都会遇到一个场景:内存溢出.如果你没有遇到过这个场景,那就说明你是个假的程序员.哈哈,开个玩笑,平时工作过程中,我们确实会遇到这个问题.今 ...
- linux虚拟机cpu高耗gc,Tomcat服务器-并发压力测试下调优注意点小结 JVM client模式和Server模式的区别 jvm 参数优化---笔记 tomcat查看GC信息...
1.Tomcat conf中server.xml有个重要的性能配置,根据机器的硬件性能合理的配置常驻线程数以及最大线程数,还有等待队列线程数: connectionTimeout="1200 ...
最新文章
- 11、查看及测试网络、配置网络地址、内核及模块管理
- 拖拽插入Table的列(I.E. ONLY)
- 赛门铁克:“高度怀疑”WannaCry的幕后黑手是朝鲜
- python学习之面向对象(三)
- ARC下的所有权修饰符
- Java杂记3—流程控制之条件
- 【云栖大会】探索云时代下的游戏开发模式
- 创建、修改、删除表总结
- 了解机器学习框架CoreML
- MMKV_微信MMKV源码分析(一) | 整体流程
- “头疼”的俄罗斯开发者:不要再买我的软件了,收入不能提现
- php输出内容到页面,php实时输出内容
- 在Windows 7 Ultimate 64位上安装Java
- linux 路由跟踪命令_一文掌握linux系统路由跟踪指令traceroute
- 发布一个平滑进度条控件
- 在php里面加音乐,如何给视频添加音乐 视频配上背景音乐
- C++ Reference: Standard C++ Library reference: C Library: cwctype: wint_t
- OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发
- Web压缩问题-图片不显示
- Shell入门之管道
热门文章
- Coprime Sequence
- 字符串char与string转换
- 计算机组成原理—Cache和主存的映射模式
- [leetcode]1131. 绝对值表达式的最大值 ---曼哈顿距离,四角思维
- LuaForUnity2:Lua基本数据类型与符号
- GameObject.Find() 和 Transform.Find()的区别
- bzoj 1878: [SDOI2009]HH的项链(主席树)
- k8s安装部署Istio
- java执行cmd命令并获取返回结果字符串
- 环,模,补码,负数的表示与减法实现