记录一次如何通过MAT工具定位内存泄漏点
一、准备可以引起内存泄漏的代码OutOfMemoryGCLimitExceed.java
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class OutOfMemoryGCLimitExceed {
public static void addRandomDataToMap() {
Map<Integer, String> dataMap = new HashMap<>();
Random r = new Random();
while (true) {
dataMap.put(r.nextInt(), String.valueOf(r.nextInt()));
}
}
public static void main(String[] args) {
OutOfMemoryGCLimitExceed.addRandomDataToMap();
}
}
二、执行,并生成dump文件

jmap -dump:format=b,file=heaptestout.bin 4824
生成dump文件heaptestout.bin
将heaptestout.bin从linux下载到本地
三、准备安装MAT工具
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内

本文详述了如何通过MAT(Memory Analyzer Tool)来分析内存泄漏问题。首先,介绍了生成dump文件的过程,然后讲解了MAT工具的安装及界面。在MAT分析中,解释了Shallow Heap、Retained Heap等概念,并指出疑似内存泄漏点——一个名为main的线程引用的HashMap。最后,提到了Java堆内存配置参数如-Xms、-Xmx、-Xmn和-Xss,并概述了新生代、老年代和永久代的工作原理。
最低0.47元/天 解锁文章
9733

被折叠的 条评论
为什么被折叠?



