使用memory analyzer tool(mat)分析内存泄漏(二)

使用memory analyzer tool(mat)分析内存泄漏(二)

ID:36240464

大小:500.85 KB

页数:13页

时间:2019-05-07

使用memory analyzer tool(mat)分析内存泄漏(二)_第1页
使用memory analyzer tool(mat)分析内存泄漏(二)_第2页
使用memory analyzer tool(mat)分析内存泄漏(二)_第3页
使用memory analyzer tool(mat)分析内存泄漏(二)_第4页
使用memory analyzer tool(mat)分析内存泄漏(二)_第5页
资源描述:

《使用memory analyzer tool(mat)分析内存泄漏(二)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、使用MemoryAnalyzertool(MAT)分析内存泄漏(二)前言的前言写blog就是好,在大前提下可以想说什么写什么,不像投稿那么字字斟酌。上周末回了趟成都办事,所以本文来迟了。K117从达州经由达成线往成都方向走的时候,发现铁路边有条河,尽管我现在也不知道其名字,但已被其深深的陶醉。河很宽且水流平缓,河边山丘森林密布,民房星星点点的分布在河边,河里偶尔些小船。当时我就在想,在这里生活是多么的惬意,夏天还可以下去畅游一番,闲来无事也可垂钓。唉,越来越讨厌北漂了。前言在使用MemoryAnalyzertool(MAT)分析

2、内存泄漏(一)中,我介绍了内存泄漏的前因后果。在本文中,将介绍MAT如何根据heapdump分析泄漏根源。由于测试范例可能过于简单,很容易找出问题,但我期待借此举一反三。一开始不得不说说ClassLoader,本质上,它的工作就是把磁盘上的类文件读入内存,然后调用java.lang.ClassLoader.defineClass方法告诉系统把内存镜像处理成合法的字节码。Java提供了抽象类ClassLoader,所有用户自定义类装载器都实例化自ClassLoader的子类。systemclassloader在没有指定装载器的情况

3、下默认装载用户类,在SunJava1.5中既sun.misc.Launcher$AppClassLoader。更详细的内容请参看下面的资料。准备heapdump请看下面的Pilot类,没啥特殊的。/** * Pilot class * @author rosen jiang */package org.rosenjiang.bo;public class Pilot{        String name;    int age;        public Pilot(String a, int b){        name

4、 = a;        age = b;    }}然后再看OOMHeapTest类,它是如何撑破heapdump的。/** * OOMHeapTest class * @author rosen jiang */package org.rosenjiang.test;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.rosenjiang.bo.Pilot;public class OOMHeapTest {    pu

5、blic static void main(String[] args){        oom();    }        private static void oom(){        Map map = new HashMap();        Object[] array = new Object[1000000];        for(int i=0; i<1000000; i++){            String d = new Date()

6、.toString();            Pilot p = new Pilot(d, i);            map.put(i+"rosen jiang", p);            array[i]=p;        }    }}是的,上面构造了很多的Pilot类实例,向数组和map中放。由于是StrongRef,GC自然不会回收这些对象,一直放在heap中直到溢出。当然在运行前,先要在Eclipse中配置VM参数-XX:+HeapDumpOnOutOfMemoryError。好了,一会儿功夫内存溢出,

7、控制台打出如下信息。java.lang.OutOfMemoryError: Java heap spaceDumping heap to java_pid3600.hprof Heap dump file created [78233961 bytes in 1.995 secs]Exception in thread "main" java.lang.OutOfMemoryError: Java heap spacejava_pid3600.hprof既是heapdump,可以在OOMHeapTest类所在的工程根目录下找到。

8、MAT安装话分两头说,有了heapdump还得安装MAT。可以在http://www.eclipse.org/mat/downloads.php选择合适的方式安装。安装完成后切换到MemoryAnalyzer视图。在Eclipse的左上角有OpenHeapDum

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。