Memory Analyzer安装


package ch02;

import java.awt.List;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
/*
 * VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
 *
 *
 *
 * */
public class HeapOOM {
     static class OOMObject{};
    public static void main(String[] args) {
     ArrayList<OOMObject> list=new ArrayList<OOMObject>();
     while(true){
         list.add(new OOMObject());
     }

    }

}
控制台打印
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid5976.hprof ...
Exception in thread "main" Heap dump file created [33357309 bytes in 0.436 secs]
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2760)
    at java.util.Arrays.copyOf(Arrays.java:2734)
    at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
    at java.util.ArrayList.add(ArrayList.java:351)
    at ch02.HeapOOM.main(HeapOOM.java:18)
Memory Analyzer安装
可以在http://www.eclipse.org/mat/downloads.php选择合适的方式安装。安装完成后切换到Memory Analyzer视图。
也可以离线下载安装到C:\Program Files\eclipse\dropins
file-》open打开项目下的堆粗快照


Overview

 

Problem Suspect 1




Problem Suspect 1

The thread java.lang.Thread @ 0x264f0c40 main keeps local variables with total size 18,095,928 (99.40%) bytes.
The memory is accumulated in one instance of "java.lang.Object[]" loaded by "<system class loader>".

Keywords
java.lang.Object[]
Details »

MAT工具分析了heap dump该图深色区域被怀疑有内存泄漏,可以发现整个heap才17.4M内存,深色区域就占了绝大部分。接下来是一个简短的描述,
告诉我们main线程占用了大量内存,并且明确指出system class loader加载的"java.lang.Thread"实例有内存聚集,并建议用关键字
"java.lang.Thread"进行检查。所以,MAT通过简单的两句话就说明了问题所在,就算使用者没什么处理内存问题的经验。在下面还有一个"Details"链接,
在点开之前不妨考虑一个问题:为何对象实例会聚集在内存中,为何存活(而未被GC)?是的——Strong Ref,


你可能感兴趣的:(Memory Analyzer安装)