本地模拟内存溢出并分析Dump文件,
分享于 点击 12485 次 点评:164
本地模拟内存溢出并分析Dump文件,
java Dump文件分析
前言
dump文件是java虚拟机内存在某一时间点的快照文件,一般是.hprof文件,下面自己模拟一下本地内存溢出,生成dump文件,然后通过mat工具分析的过程。
配置虚拟机参数
要想本地模拟oom异常,那么建议将堆内存设置的小一点,那样容易触发
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录} -Xms20m -Xmx20m
模拟oom异常的程序
public class Test1 {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
while (true){
Person person = new Person();
person.setDate(new Date());
person.setAge(20);
person.setName("test");
personList.add(person);
}
}
}
很明显,一直创建Person对象,却又无法释放,很快就内存溢出了。
java.lang.OutOfMemoryError: GC overhead limit exceeded
Dumping heap to java_pid21892.hprof ...
Heap dump file created [33907612 bytes in 0.152 secs]
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at Test1.main(Test1.java:15)
生成的文件名称是java_pid21892.hprof,在项目的根目录下面,文件大小33.9M
MAT工具分析dump文件
预览
预览界面,能清楚的看到整个堆总内存18.7M,但是有18.3M的内存被一个类的对象占用了
功能介绍
总结
以上用作笔记,方便下次本人查阅为主。
相关文章
- 暂无相关文章
用户点评