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

一步一个脚印,方便自己复习,该出手时就出手,有错误,一定要指正,非常感谢,共同进步!

eclipse中mat插件使用的更多相关文章

  1. eclipse中egit插件使用

    这篇文章当时制作有点粗糙,建议阅读升级版:eclipse中egit插件使用--升级版 使用git作为项目的代码管理工具现在是越来越火,网上有各种各样的文章.博客.讨论,其中以命令行居多.使用eclip ...

  2. 解决eclipse中git插件中的cannot open git-upload-pack问题

    有时候在eclipse上使用插件egit向github或者osc上同步代码时,有时候会发现出现cannot open git-upload-pack这个问题. 一般引起这个问题的原因有两个:一.网络问 ...

  3. 【转】eclipse中egit插件使用

    原文网址:http://my.oschina.net/songxinqiang/blog/192567 eclipse和git这个两个工具的使用人数都是相当多的,在eclipse里面也有egit插件来 ...

  4. 怎么清除SVN密码,以及重置eclipse中svn插件密码

    如何清除SVN密码,以及重置eclipse中svn插件密码? 清除SVN客户端密码方法: 邮件选择TortoiseSVN中的settings选项---Saved Data---右边会发现有个Authe ...

  5. eclipse中svn插件的安装

    Svn(Subversion)是近年来崛起的版本管理工具,在当前的开源项目里(J2EE),几乎95%以上的项目都用到了SVN.Subversion项目的初衷是为了替换当年开源社区最为流行的版本控制软件 ...

  6. eclipse中svn插件的安装与使用

    eclipse中svn插件的安装与使用 一.    eclipse中svn插件的安装 eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 ...

  7. eclipse中svn插件的安装和tortoiseSVN的安装

    在项目的开发中一般都需要用到版本控制,其中用的比较多的就是svn(subVersion),svn的使用既可以以插件的形式,也可以以客户端的形式使用.今天就介绍一下eclipse中svn插件的2种安装方 ...

  8. eclipse中jetty插件安装

    注:本文来源于:<eclipse中jetty插件安装> 一.eclipse中jetty插件安装: 打开eclipse,依次点击菜单Help->Eclipse Marketplace, ...

  9. eclipse中svn插件的工程不能与svn资源库同步的解决方法

    eclipse中svn插件的工程不能与svn资源库同步的解决办法 最近几天自己的工程与资源库同步总是出现问题,重启机器后发现资源库丢失了,无法进行同步. 解决办法如下: 1.右键工程---->选 ...

随机推荐

  1. 使用shell生成随机数

    #!/bin/bash $` do $` do s=$(($RANDOM%)) done done 第1行:#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示 ...

  2. DataRow 数组转化成DataTable

    #region 封装DataTable DataTable dt = null; if (newRows.Length > 0) { dt = newRows[0].Table.Clone(); ...

  3. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  4. Widows 注册表 HKEY_CLASSES_ROOT

    Widows 注册表 HKEY_CLASSES_ROOT在此关键字之下,可以看到有一个CLSID关键字.在CLSID关键字之下列有系统中安装的所有组件的CLSID.注册表CLSID是一个具有如下格式的 ...

  5. javascript快速入门8--值,类型与类型转换

    原始值和引用值 在ECMAScript中,变量可以存放两种类型的值,即原始值和引用值. 原始值(primitive value)是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量 ...

  6. python 操作solr索引数据

    测试代码1: def test(self): data = {", "*字段名*": u"我是一个大好人"}}} params = {"bo ...

  7. Spark(三) -- Shark与SparkSQL

    首先介绍一下Shark的概念 Shark简单的说就是Spark上的Hive,其底层依赖于Hive引擎的 但是在Spark平台上,Shark的解析速度是Hive的几多倍 它就是Hive在Spark上的体 ...

  8. vuex介绍

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 ...

  9. spring中使用 @value 简化配置文件的读取

    1.在applicationContext.xml文件中配置properties文件 <bean id="propertyConfigurer" class="or ...

  10. GCD编程-串行队列与并发队列

    接着上面的GCD封装,以下进行列子验证 1.导入GCD.h 2.创一个串行队列: - (void)serailQueue{ //创建出队列 GCDQueue *queue =  [[GCDQueue  ...