在Eclipse上安装 MAT
help -> install New Software... -> add
image.png
按照提示安装即可.
使用MAT
在运行目标程序是,配置VM参数: -XX:+HeapDumpOnOutOfMemoryError
image.png
这样可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便分析.
2.案例:执行代码后报错:
import java.util.ArrayList;
import java.util.List;
public class JVCode_2_3_HeapOOM {
static class OOMObject {
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
while(true) {
list.add(new OOMObject());
}
}
}
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid20186.hprof ...
Heap dump file created [27713936 bytes in 0.137 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:265)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
at java.util.ArrayList.add(ArrayList.java:462)
at JVCode_2_3_HeapOOM.main(JVCode_2_3_HeapOOM.java:14)
在Eclipse中打开MAT视图
MAT
打开项目中的Dump文件:
image.png
查看具体内存情况:
image.png
从这块就可以看出具体是哪些对象占用了大部分的内存:
image.png