MAT内存溢出

通过MAT工具对dump文件进行分析

1.MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰
富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析
工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止
了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。

下载地址:https://www.eclipse.org/downloads/download.php


二、内存溢出的定位与分析
内存溢出在实际的生产环境中经常会遇到,比如,不断的将数据写入到一个集合中,出
现了死循环,读取超大的文件等等,都可能会造成内存溢出。
如果出现了内存溢出,首先我们需要定位到发生内存溢出的环节,并且进行分析,是正
常还是非正常情况,如果是正常的需求,就应该考虑加大内存的设置,如果是非正常需
求,那么就要对代码进行修改,修复这个bug。
首先,我们得先学会如何定位问题,然后再进行分析。如何定位问题呢,我们需要借助
于jmap与MAT工具进行定位分析。
接下来,我们模拟内存溢出的场景。

1、模拟内存溢出
编写代码,向List集合中添加100万个字符串,每个字符串由1000个UUID组成。如果程
序能够正常执行,最后打印ok。

package cn.mrhan.frames.jvm;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class TestJvmOutOfMemory {
    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        for (int i = 0; i < 10000000; i++) {
            String str = "";
            for (int j = 0; j < 1000; j++) {
                str += UUID.randomUUID().toString();
            }
            list.add(str);
        }
        System.out.println("ok");
    }
}
为了演示效果,我们将设置执行的参数,这里使用的是Idea编辑器。

设置参数:‐Xms8m ‐Xmx8m ‐XX:+HeapDumpOnOutOfMemoryError

运行测试结果

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid4772.hprof ...
Heap dump file created [9245221 bytes in 0.038 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3332)
    at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
    at java.lang.StringBuilder.append(StringBuilder.java:136)
    at cn.mrhan.frames.jvm.TestJvmOutOfMemory.main(TestJvmOutOfMemory.java:13)

Process finished with exit code 1
将生成的文件导入mat查看





可以看到,有75%的内存由Object[]数组占有,所以比较可疑。
分析:这个可疑是正确的,因为已经有超过90%的内存都被它占有,这是非常有可能出
现内存溢出的。
查看详情:


可以看到集合中存储了大量的uuid字符串
————————————————
版权声明:本文为CSDN博主「宇的博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43621789/article/details/108836512
posted @ 2023-06-29 17:59  舞步林云  阅读(160)  评论(0编辑  收藏  举报