第一步安装Eclipse Memory Analyzer(之前在eclipse中直接通过安装Memory Analyzer,发现用不了,还是直接去官网下载安装):
下载路径:https://www.eclipse.org/mat/
下载后解压安装:
然后需要..hprof文件,这就是我们分析的文件:
创建一个heap溢出的项目:
package cn.mxl.heap;
import java.util.ArrayList;
import java.util.List;
public class OomHeap {
public static void main(String[] args) throws InterruptedException {
List<Object> list=new ArrayList<Object>();
while(true) {
list.add(new Test());
}
}
}
class Test{
}
配置项目中jvm参数:
-XX:HeapDumpPath=D:\eclipsseMemoryAnalyze //文件保存位置
-XX:+HeapDumpOnOutOfMemoryError //生成heap分析文件
-Xms2m -Xmx2m //设置jvm内存大小
运行之后:
打开tool:
它这里描述的在main函数中arraylist的add操作存在heap溢出 .
Accumulated Objects in Dominator Tree:在根树上积累对象;
也就是说因为arraylist的add操作导致一直在增加对象,导致heap溢出