首先建一个堆溢出的类OOm.java
Map map=new HashMap();
for(int i=0;i<128;i++){
map.put(i,byte[1024*1024]);
}
1.使用-XX:+HeapDumpOnOutOfMemryError参数,拿到堆快照,以供分析
java -Xmx128m -XX:+HeapDumpOnOutOfMemoryError OOm
2.使用visualvm.exe分析快照
可以看出 byte[]占最大 99%,由此可以判断谁除了问题
![](https://img.haomeiwen.com/i19596990/6333f7a642b62554.jpg)
Heap Dump分析
Metaspace/PermGen
瞄准class对象
HeapSpace
瞄准占空间的最大对象
Path to GC Roots
顺着看代码
1使用Mat工具查看快照
一般使用两个功能
首先点击Leak Suspects: includes leak suspects and a system overview,查看潜在的可能
会给你提示哪里有报错。
![](https://img.haomeiwen.com/i19596990/82342d31012d2db5.jpg)
其次,点击Histogram: Lists number of instances per class,列出堆中的所有对象。根绝这个潜在的可能对象取搜索出来查看
![](https://img.haomeiwen.com/i19596990/87058a58703fff31.jpg)
网友评论