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,


转载于:https://my.oschina.net/goudingcheng/blog/635545

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值