1、模拟内存移除场景
public class OOMTest {
public static void main(String[] args) {
List<byte[]> memoryLeakArray = new ArrayList<>();
for (int i = 0; i<1024; i++){
byte[] bytes = new byte[1024 * 1024];
memoryLeakArray.add(bytes);
}
}
}
初始化启动参数最大堆内存为20m,在内存溢出的时候生成一个dump文件,然后存储在对应目录下
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\report
2、Eclipse Memory Analyzer 分析内存溢出
打开mat导入内存溢出dump文件,选择Leak Suspects Report
- 占用内存过大的对象有哪些(Histogram)
查看占用对象直方图,显示占用内存大小,浅堆(Shallow Heap)只限当前对象占用的大小
- 被谁引用(dominator_tree)
- 定位到具体代码(tread_overview)