eclipse MemoryAnalyzer 看内存泄露

工具下载链接:

http://iso.mirrors.ustc.edu.cn/eclipse/mat/1.7/rcp/MemoryAnalyzer-1.7.0.20170613-win32.win32.x86_64.zip

示例代码:

import java.util.Map;  
  
import java.util.HashMap;  
  
  
/** 
 
 * JVMOutOfMemoryErrorSimulator 
 
 */  
  
public class JVMOutOfMemoryErrorSimulator {  
  
       private final static int NB_ITERATIONS = 500000;  
  
       // ~1 KB data footprint  
  
       private final static String LEAKING_DATA_PREFIX = "datadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadatadata";  
  
       // Map used to stored our leaking String instances  
  
       private static Map<String, String> leakingMap;  
  
       static {  
  
              leakingMap = new HashMap<String, String>();  
  
       }  
  
  
       public static void main(String[] args) {  
  
              System.out.println("JVM OutOfMemoryError Simulator 1.0");  
  
              System.out.println("Author: Pierre-Hugues Charbonneau");  
  
              System.out.println("http://javaeesupportpatterns.blogspot.com/");  
  
              try {  
                     for (int i = 0; i < NB_ITERATIONS; i++) {  
                           String data = LEAKING_DATA_PREFIX + i;  
                      
                           // Add data to our leaking Map data structure...  
  
                           leakingMap.put(data, data);  
                     }  
  
              } catch (Throwable any) {  
  
                     if (any instanceof java.lang.OutOfMemoryError) {  
  
                            System.out.println("OutOfMemoryError triggered! "  
  
                                         + any.getMessage() + " [" + any + "]");  
                     } else {  
  
                           System.out.println("Unexpected Exception! " + any.getMessage()  
  
                                         + " [" + any + "]");  
                     }  
              }  
              System.out.println("simulator done!");  
  
       }  
}  

------------

程序输出:

JVM OutOfMemoryError Simulator 1.0
Author: Pierre-Hugues Charbonneau
http://javaeesupportpatterns.blogspot.com/
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid15000.hprof ...
Heap dump file created [129086814 bytes in 0.464 secs]
Exception in thread "main" 
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"


dump文件产生在工程目录下:

D:\guolong\eclipsework\testWorkspace\TestProjectjava_pid15000.hprof

step1

导入上述dump文件



step2:点,查看可疑泄露项



step3 找到产生内存泄露的类,并点开详情:


step4:定位产生泄露对象,类中变量的位置






HashMap源码中,table属性的位置:



HashMap源码中,Node结构的定义:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值