MAT手册
本文讲述通过MAT分析内存泄露
1、使用Eclipse 分析内存泄露
1.1 MAT
MAT是一款 提供Java内存分析和定位问题的eclipse 插件。帮助RD 找到内存泄露以及找到耗内存的地方
1.2 使用heap dump 获取服务某一时刻的内存映像
heap dump文件是在某一时刻有关服务的完整Java对象的内存映像。它以二进制文件(hprof)存储。里面包含了所有的对象、属性、私有类型以及对象引用。
2、安装
参考《入门前必读文章》
3、创建heap dump
在jvm发生内存溢出的时候就会输出heap dump 文件。只需要配置一下jvm参数 -XX:+HeapDumpOnOutOfMemoryError 即可 。
4、使用MAT
4.1 查看heap dump 文件
一个head dump 文件创建之后,可以通过eclipse查看。如果是使用MAT创建的文件,则会自动打开文件。
刷新项目,双击文件,然后选择泄露可疑报告(Leak Suspects Report)即可。
从overview 页开始heap dump文件。支配树(Dominator tree)能够快速展现一个用户使用对象的概述。
在Dominator tree 页面,可以看出谁使用了这个引用。 可以选中一个条目,然后选择 “Find shortest path to GC root”。
4.2 使用eclipse 分析Android
Android 也可以输出应用服务的heap dumps. 在DDMS 透视图中使用 “Dump HRPOF file” 就可以创建一个heap dump文件。
Android heap dump 文件的格式跟Java的类似,不完全相同。MAT可以直接分析Android heap dump 文件。
5、案例
创建Java项目
package com.vogella.mat.first;
import java.util.ArrayList;
import java.util.List;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
while (1<2){
list.add("OutOfMemoryError soon");
}
}
}
在IDE上添加jvm参数 -XX:+HeapDumpOnOutOfMemoryError
运行项目,一会就会crash, 并且会输出一个heap dump 文件。打开heap dump 开始你的MAT之旅吧。
6、jconsole
也可以使用Java自带的jconsole来输出heap dump文件。直接使用命令行就可以。
要想使用jconsole,需要添加如下参数 -Dcom.sun.management.jmxremote
jconsole的常用用法
http://www.oracle.com/technetwork/java/index.html https://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html
参考文献
原文地址: http://www.vogella.com/tutorials/EclipseMemoryAnalyzer/article.html