zoukankan      html  css  js  c++  java
  • eclipse中mat插件使用

    http://smallnetvisitor.iteye.com/blog/1826434

    User.java

    class User {  
        private String id;  
        private String name;  
      
        public String getId() {  
            return id;  
        }  
      
        public void setId(String id) {  
            this.id = id;  
        }  
      
        public String getName() {  
            return name;  
        }  
      
        public void setName(String name) {  
            this.name = name;  
        }  
      
        public User(String id, String name) {  
            super();  
            this.id = id;  
            this.name = name;  
        }  
      
    }

    main方法:

    public static void main(String[] args) {  
        List<User> list = new ArrayList<User>();  
        for (int i = 1; i < 10000; i++) {  
            User o = new User(i + "", System.currentTimeMillis() + "");  
            list.add(o);  
            o = null;  
        }  
        System.out.println("end");  
        try {  
            Thread.sleep(100000000l);  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
    }


    运行user任务管理器查看到的pid号:

    基于jmap导出的堆信息:

    用装了mat插件的eclipse打开firstHeap.bin文件

    选择Leak Suspects Reports模式,finish

    在底部的Actions有

    (1)histogram
    列出了有每个种有多少实例,每种类型的实例集合的 shallow size 和  retained size . shallow size指的是对象所消耗的内存大小,如每个对象引起消耗4个字节,或者8个字节,取决于你的操作系统(32位,还是64位), retained size的概念依赖于Retained set 的概念,Retained set 指的是当对象X被回收时,所有被垃圾回收器移除的对象集合,
    Retained size 即是Retained set所保持的内存大小。

    当然histogram 不仅可以通过类进行数据组织,还可以通过class loader, packages or superclass .来进行数据的组织。

    (2)The Dominator Tree
    列出了堆中最大的对象,第二层级的节点表示当被第一层级的节点所引用到的对象,当第一层级对象被回收时,这些对象也将被回收。这个工具可以帮助我们定位对象间的引用情况,垃圾回收时候的引用依赖关系。

    (3)Path to GC Roots
    被JVM持有的对象,如当前运行的线程对象,被systemclass loader加载的对象被称为GC Roots, 从一个对象到GC Roots的引用链被称为Path to GC Roots, 通过分析Path to GC Roots可以找出JAVA的内存泄露问题,当程序不在访问该对象时仍存在到该对象的引用路径。


    点击details

    这些对象有可能会溢出,然后我们打开OQL窗口

    执行如下OQL语句

    也就是说这个是null,但是仍然有强引用存在,gc的时候是不能回收的,这样就会出现内存的溢出问题

    不懂就按F1,关于OQL有详细介绍,

    或进官网  mat Querying Heap Objects:http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Ftasks%2Fqueryingheapobjects.html

    一步一个脚印,方便自己复习,该出手时就出手,有错误,一定要指正,非常感谢,共同进步!
  • 相关阅读:
    关于此博客的制作
    Java线程运行轨迹-代码追踪与定位
    MySQL安装和使用
    jenkins安装和使用教程
    持续集成(git+TortoiseGit+Gitblit)
    RF框架基础知识(二)
    RF工具ride使用
    Postman的使用
    用Python写RF测试
    RF框架基础知识(一)
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/4254129.html
Copyright © 2011-2022 走看看