java__工具 MAT 内存分析使用简介

前景:

终于来到了JVM的学习,今天主要熟悉一下MAT这个工具的使用

安装:

由于我们在本机上使用,作为学习,不存在正在进行的进程,所以总是将文件dump出来后然后分析

导出文件

导出文件的方法
1、jmap
2、配置参数,-XX:+HeapDumpOnOutMemoryError,让虚拟机出现OOM异常之后自动生成dump文件,对于我们初学,这样就行了

就好像eclipse里面会出现这样:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid9727.hprof ...
Heap dump file created [15435019 bytes in 0.021 secs]

下载:

http://www.eclipse.org/mat/downloads.php
解压命令unzip,解压到当前文件夹

启动

这里写图片描述
启动需要在命令行中,像这样

dream@love_lyy:~/mat$ ./MemoryAnalyzer 

然后选中红框,打开之前保存的文件,选择
这里写图片描述
这个呢,主要是自动检查内存的泄露,哪些对象仍然存活为什么它们没有被回收

分析

总图:
这里写图片描述
这个时候你就已经进入到了分析的界面这里写图片描述
我们可以看到这个里面的一个Problem Suspect(问题猜测),它说这个线程保存本地变量占用了97.42%,内存被一个类的对象实例堆积了,点击红框查看细节部分
这里写图片描述
如果有GC root的路径那么这个聚集点不会被回收,我们可以看到这个问题出现在main中的ArrayList上面

测试的源代码

public class Test 
{
    public static void main(String[] args)
    {
        List<String> aList = new ArrayList<String>();
        while (true)
        {
            aList.add("123");
        }
    }
}

这里写图片描述
我们可以看到下面的main线程栈的详细内容,正如我们的代码所看到的,这里我们测试的是内存溢出(堆),同时这边也出现了内存泄露。

总结

这便是最简单的查看内存泄露和溢出的方法,软件功能很强大,这里我们用到的分析还是浅薄的,不过掌握一点点技巧,以后会有用的

猜你喜欢

转载自blog.csdn.net/qq_41376740/article/details/80107620