`

Eclipse 内存分析器MAT(四)基本使用手册

阅读更多
1.首先我们通过下面的一个示例代码产生一个OutOfMemoryError时对应的dump文件
/**
 * 
 */
package simple.test;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: 作者: chengaofeng
 * @date: 创建时间:2018-09-11 16:50:59
 * @Description: TODO
 * @version V1.0
 */
public class MatSimple {

	public static void main(String[] args) {
		PersonRepo pp = new PersonRepo();
		pp.autoCreatePerson(10000000);
	}

	public static class PersonRepo {

		private List<Person> repo = new ArrayList<>();

		public void autoCreatePerson(long count) {
			for (long l = 0; l < count; l++) {
				repo.add(new Person(l));
			}
		}
	}

	public static class Person {
		private long num;

		/**
		 * @param num
		 */
		public Person(long num) {
			this.num = num;
		}

		public long getNum() {
			return this.num;
		}

	}
}

我们通过在eclipse中配置运行参数的形式获取对应的dump



执行run,很快在控制台中会出现异常以及生成dump文件的信息


2.利用MAT打开dump文件 File >   Open Heap Dump...
默认情况会让选择一个报告模式,可以跳过,也可以选择任意一个选择finish,之后进入Overview界面



2.1 Overview

在右侧的窗口的details分类下可找到dump的大小,类、对象、以及类加载器的个数。
接下来的饼图中列出了dump中的大对象,一般情况下当某一类对象占用的特别多时就是程序有内存泄漏的可能了。当鼠标滑过一个饼图中的一个分类时在右侧会显示详细信息,点击在弹出菜单中可进一步对这一类对象进行分析。
2.2 Histogram
通过工具栏中的Histogram按钮或者在Overview界面的action中选择Histogram可以打开Histogram界面。



通过Histogram可以看到每类对象的个数以及shallow size 和 retained size .




在这个页面,我们已经很明确看出来,现在dump中主要是存储了大量的simple.test.MatSimple$Person对象(1,215,488个,占用了快30M的内存)对于我们的测试应用来说已经能发现是对Person对象的处理有问题造成了内存泄漏。

在这个页面我们可以对任何有疑问的对象做进一步分析


或者对对象分组排序等操作


例如按package排序后很容易就能看出是哪个package中的类占用的内存比较多



2.3 Dominator Tree
通过工具栏中的Dominator Tree按钮或者在Overview界面的action中选择Dominator Tree可以打开Dominator Tree界面。



Dominator Tree列出了dump中所有占用内存大的对象。Dominator Tree在分析dump中哪个对象保持其他对象存活方面非常强大。并且也可以用package、class loader来排序


通过这个图,我们可以看到,在我们的例子中,主线程中保留了一个Person对象数组(list的底层实现是一个数组),里面保存了1,215,462个person对象,因为main tread无法被GC,造成大量的person对象无法被GC,即问题是出在主线程的一个存储Person对象的数组(list)中的。继而我们就可以发现代码问题了。
2.4 Path to GC Roots
GC Roots指的是那些被jvm保持存活状态的对象,通过分析一个对象到GC Roots的路径,可以更加清楚的看到是因为什么原因造成此对象在内存中一直存活的,即一个对象为什么没有被GC回收,在Dominator Tree界面选中人意我们想分析的对象,点击






可以看到我们的person对象是作为一个Object存储在了main Thread中的一个ArrayList中的。

2.5 The Leak Report
通过这个MAT会自动给我们一个最有可能引起内存问题的报告





MAT给出的推断是main Thread中保持了一个Object[]变量,占用了大量的空间,点击details


在Dominator Tree堆积列表中,可以看出实际是存储了大量的Person对象。


2.6 Top Consumer
在Overview界面的actions中选择Top Consumer操作,可以列出dump中占用空间最大的对象,并用类和package分组,当我们分析的dump文件特别大时可以用这个操作先对大对象分析
  • 大小: 77.4 KB
  • 大小: 70.6 KB
  • 大小: 119.6 KB
  • 大小: 221.7 KB
  • 大小: 166.2 KB
  • 大小: 105 KB
  • 大小: 153.5 KB
  • 大小: 68 KB
  • 大小: 75 KB
  • 大小: 88.1 KB
  • 大小: 263.2 KB
  • 大小: 171.7 KB
  • 大小: 73.7 KB
  • 大小: 99 KB
  • 大小: 93.1 KB
  • 大小: 120.6 KB
分享到:
评论

相关推荐

    内存分析工具MAT

    MAT(Memory Analyzer Tool)是一款由Eclipse基金会开发的专业Java堆内存分析工具,它同样适用于Android应用的内存管理。MAT可以帮助开发者识别内存泄漏、查找对象生命周期问题以及优化内存使用效率。 标题中的...

    mat内存分析工具单独软件无需安装-Eclipse Memory Analyzer Version 1.7.0.rar

    MAT(Memory Analyzer Tool)是Eclipse项目开发的一款强大的Java内存分析工具,主要用于诊断Java应用程序的内存泄漏和性能问题。在标题中提到的“Eclipse Memory Analyzer Version 1.7.0.rar”是一个压缩包,其中...

    eclipse MAT 内存分析工具

    Eclipse Memory Analyzer (MAT) 是一个强大的内存分析工具,尤其对于Java开发者来说,它是一个不可或缺的调试利器。MAT主要用于诊断Java应用程序的内存泄漏问题,帮助优化内存使用效率。这款工具由Eclipse基金会开发...

    Eclipse内存分析器

    Eclipse Memory Analyzer(简称MAT)是一个功能强大的Java堆内存分析工具,旨在帮助开发人员识别和解决Java应用程序中的内存泄漏和性能问题。它可以分析Java堆内存的快照,并提供详细的报告和可视化工具,帮助用户...

    Java+内存分析工具+MAT

    MAT(Memory Analyzer Tool)是由IBM开发的一款强大的Java堆内存分析器,它的全名是Eclipse Memory Analyzer。这款工具是开源的,完全免费,并且是基于Eclipse IDE构建的,因此对于熟悉Eclipse的开发者来说,上手...

    Mac OS java内存分析工具MAT

    MAT是Eclipse项目的一部分,它是一款免费且开源的工具,专门用于分析Java堆转储(Heap Dump)文件,帮助开发者识别内存泄漏、分析内存占用情况以及优化内存使用。MAT提供了丰富的功能和视图,使得复杂的内存问题变得...

    jvm内存分析工具mat

    在使用MAT进行分析时,首先需要获取JVM的内存快照,这通常可以通过JVM的命令行参数`-XX:+HeapDumpOnOutOfMemoryError`来设置,或者通过JConsole、VisualVM等工具手动触发。然后将生成的hprof文件导入MAT,进行分析。...

    MAT使用手册无加密.pdf

    总结来说,MAT使用手册详细地介绍了如何使用MAT工具来分析Java堆内存问题,提供了对Heap Dump文件的深入理解,并通过一些核心概念如Shallow Heap、Retained Heap、Dominator Tree和Garbage Collections Roots等,...

    一次使用Eclipse Memory Analyzer分析Tomcat内存溢出

    通过本次使用 Eclipse Memory Analyzer (MAT) 分析 Tomcat 内存溢出的过程,我们可以得出以下结论: - 内存管理对于 Java 应用程序至关重要。 - 遇到内存溢出或泄露问题时,MAT 是一款非常强大的工具,可以帮助快速...

    java 内存分析工具(MAT)

    标题所指的“java 内存分析工具(MAT)”即Memory Analyzer Tool,它是一款强大的Java内存堆分析工具,主要被用来分析Java应用程序的内存占用情况,查找内存泄漏和优化内存使用。该工具能够分析大型的heap dump文件...

    Android MAT 内存分析 工具

    MAT(Memory Analyzer Tool)是由Eclipse基金会开发的一款强大的Java堆内存分析工具,虽然在Android Studio中内置了内存分析功能,但若需要更深入的内存泄漏检测和性能优化,MAT提供了更为专业的解决方案。MAT工具...

    mat内存分析工具,最新(20161215)

    MAT,全称Memory Analyzer Tool,是由Eclipse基金会开发的一款强大的Java堆内存分析工具。这款工具在2016年12月15日更新的版本,对于Java开发者来说,是诊断和解决内存泄漏问题的重要助手。MAT提供了丰富的功能,...

    jmap+EclipseMAT:排查内存泄漏的好工具.pdf

    EclipseMAT 是一个功能强大且易于使用的内存分析工具,它的优点包括: * 可以快速地分析大规模的堆 heap 信息。 * 可以自动检测内存泄漏的来源。 * 提供了详细的分析报告,包括对象的数量、大小、引用关系等信息。 ...

    (二)MATJVM 内存分析工具.MAT JVM 内存分析工具.MAT JVM 内存分析工具.

    MAT(Memory Analyzer Tool)是IBM开发的一款强大的Java内存分析工具,专用于诊断和解决Java应用程序中的内存泄漏问题。MAT JVM内存分析工具可以帮助开发者深入理解Java虚拟机(JVM)的内存管理机制,通过分析堆内存...

    MAT解析hprof内存溢出分析工具OutOfMemoryError-java程序开发

    MAT(Memory Analyzer Tool)是IBM提供的一款强大的Java内存分析工具,它专为解决此类问题而设计,帮助开发者深入理解内存消耗,有效地定位内存泄漏和性能瓶颈。 MAT的使用方法和功能详解: 1. **数据获取**:首先...

    在Eclipse状态栏上增加JVM内存用量指示器

    1. **安装插件**:Eclipse有一个名为Memory Analyzer Tool (MAT)的内置工具,用于分析内存泄漏。不过,MAT并不直接在状态栏显示内存使用情况。可能需要寻找第三方插件,如`Memory Monitor`,它可以在Eclipse的状态栏...

    mat分析工具window64位

    - 在分析大内存堆时,MAT可能会消耗大量系统资源,确保有足够的内存供MAT使用。 - 分析结果可能需要专业知识解读,理解Java内存模型和垃圾收集机制是必不可少的。 - 不要仅仅依赖MAT,结合代码审查和性能测试,才能...

    Eclipse Memory Analyzer1.8.1&安装使用指南.zip

    Eclipse Memory Analyzer(MAT)是一款强大的Java内存分析工具,它被广泛用于诊断和解决Java应用程序中的内存泄漏问题。MAT 1.8.1是适用于macOS的特定版本,旨在帮助开发者深入理解并优化他们的Java应用内存使用情况...

    MAT(MemoryAnalyzerTools)内存分析工具win32绿色破解版下载

    此工具为MAT(MemoryAnalyzerTools)win32位工具,用来做内存分析,供JAVA或android开发者使用,解压即用相当方便,喜欢的小伙伴可以试试!

    Java内存泄漏排除工具mat

    MAT的使用不仅限于内存泄漏分析,还可以用于优化内存配置,理解应用程序的内存使用模式,以及在复杂环境下的问题定位。配合Eclipse IDE(eclipsec.exe)中的插件,MAT能更好地融入开发流程,提高问题排查效率。 在...

Global site tag (gtag.js) - Google Analytics