目录
1、MAT使用场景
用于定位到系统里到底是什么样的对象太多了,占用了过多的内存。
2、代码
public class Demo3 {
public static void main(String[] args) throws InterruptedException {
List<Data> list = new ArrayList<Data>();
for (int i = 0; i < 10000; i++) {
list.add(new Data());
}
Thread.sleep(1 * 60 * 60 * 1000);
}
static class Data{}
}
在代码里创建10000个自定义的对象,然后就陷入一个阻塞状态就可以了。
3、获取jvm进程的dump快照文件
- 先在本地命令行运行一下jps命令,查看PID 1177
- 再jmap命令可以导出dump内存快照: jmap -dump:live,format=b,file=dump.hprof 1177
4、使用MAT分析内存快照
注意:如果是线上导出来的dump内存快照,很多时候可能都是几个GB的
比如我们这里就是8个多GB的内存快照,所以就务必在MAT的MemoryAnalyzer.ini文件里,修改他的启动堆大小 为8GB。
接着就分析即可。