欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

本地模拟内存溢出并分析Dump文件,

来源: javaer 分享于  点击 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的内存被一个类的对象占用了

功能介绍

总结

以上用作笔记,方便下次本人查阅为主。

相关文章

    暂无相关文章
相关栏目:

用户点评