`

Eclipse 内存分析器MAT(二)基础概念

阅读更多
1.Heap Dump(java 堆dump文件)
  Heap Dump代表的是java处理器(jvm)在特定时间点对应的内存快照(如出现OutOfMemoryError的时候)。根据生成dump文件时指定的格式以及采用的jvm类型,dump文件中可能会包含着不同的信息,但通常来说,里面都会包含在快照生成时java heap中的类和对象。在一般情况下,在触发快照生成前都会有一个Full GC处理,所以dump文件中只会保留无法被垃圾回收机制回收的对象。
在大多数情况下dump中包含如下内容
  • 所有的对象
  •   类、字段、原生数据(int、double等)、引用
  • 所有的类
  •   类加载器、名称、超类、静态字段
  • 垃圾回收根对象
  •   指能通过jvm到达的对象(后面会详细说明)
  • 线程栈河本地变量
  •   快照生成时所有线程中的堆栈信息、本地变量的桢信息

dump文件中不包含对象地址的分配信息,所以不能通过dump文件分析出对象是被哪个对象创建的,也无法查出对象是在什么时候创建的。
2.Shallow Heap 和 Retained Heap
  • Shallow heap 代表的是对象X自身占用的内存,如一个引用占用32或64bit,一个integer占4byte等。
  • Retained set 代表的是对象X被垃圾回收器回收后能被GC从内存中移除的所有对象集合,例如在对象树中Y只能通过X才能访问到,那么Y就是属于X的Retained set中的一员。
  • Retained heap 代表的是对象X对应的Retained set中所有对象的Shallow heap之和,也就是由于对象X的存在而占用的内存大小
  • leading set 一个对象集合的Retained set(例如一个特定类的所有对象集、一个特定类加载器加载的类对应对象集)指的是当这些对象集合中的对象都变的不可访问时释放的总的对象集合,因此这个Retained set即包含这个对象集合中的对象,也包含哪些只能通过这个集合中的对象才能访问的对象。对象的Retained heap就是这个Retained set中的所有对象的Shallow Heap。

总的来说,一个对象的shallow heap就是这个对象自身在堆中的大小而同一个对象的Retained heap就是这个对象被GC回收后释放的总的内存大小。而leading set 就是这个集合中所有对象对应的Retained set。
下面用一张图来说明



其中A和B是GC root对象,如方法参数对象,本地创建的native对象,用来执行wait()、notify()、synchronized()方法的对象等。
leading setRetained set
GG
E1,E2E1,E2,G,I
CC,D,E1,E2,F,G,H,I
A,BA,B,C,D,E1,E2,F,G,H,I

3.Dominator Tree
MAT提供一个heap dump中的对象树对应的Dominator Tree,通过将对象树转换成Dominator Tree能帮助我们快速的发现占用内存最大的块,也能帮我们分析对象之间的依赖关系。几个术语定义如下
  • 对象X Dominator(支配)对象Y,当且仅当在对象树中所有到达Y的路径都必须经过X
  • 对象Y的直接Dominator,是指在对象树中距离Y最近的Dominator
  • Dominator tree利用对象树构建出来。在Dominator tree中每一个对象都是他的直接Dominator的子节点。

Dominator tree具有下面几个主要属性
  • 对象X的sub-tree(被X 支配的对象)代表着X的Retained set
  • 如果X直接支配着Y对象,那么X的直接支配者也支配着Y对象,依次类推
  • Dominator tree并不直接对应着对象树中的引用关系

对象树和Dominator tree的对应关系如下


4.Garbage Collection Roots(GC root)
一个GCroot指的是可以从堆外部访问的对象,有以下原因可以使一个对象成为GCroot对象
  • System Class
  • 通过bootstrap/system 类加载器加载的类,如rt.jar中的java.util.*
  • JNI Local
  • Local variable in native code, such as user defined JNI code or JVM internal code.
  • JNI Global
  • Global variable in native code, such as user defined JNI code or JVM internal code.
  • Thread Block
  • Object referred to from a currently active thread block.
  • Thread
  • 一个启动的还没有停止的线程
  • Busy Monitor
  • 调用了wait()、notify()方法,或者是同步对象,例如调用synchronized(Object) 或者进入一个synchronized方法后的当前对象
  • Java Local
  • 本地变量,例如方法的输入参数或者是方法内部创建的仍在线程堆栈里面的对象
  • Native Stack
  • In or out parameters in native code, such as user defined JNI code or JVM internal code. This is often the case as many methods have native parts and the objects handled as method parameters become GC roots. For example, parameters used for file/network I/O methods or reflection.
  • Finalizable
  • An object which is in a queue awaiting its finalizer to be run.
  • Unfinalized
  • An object which has a finalize method, but has not been finalized and is not yet on the finalizer queue.
  • Unreachable
  • An object which is unreachable from any other root, but has been marked as a root by MAT to retain objects which otherwise would not be included in the analysis.
  • Java Stack Frame
  • A Java stack frame, holding local variables. Only generated when the dump is parsed with the preference set to treat Java stack frames as objects.
  • Unknown

  • 大小: 8.2 KB
  • 大小: 20.9 KB
分享到:
评论

相关推荐

    Eclipse内存分析器MAT.rar

    Eclipse MAT(内存分析器工具)是分析 JVM 堆 Dump 文件的强大工具。它具有几个非常有效分析内存问题的强大功能。“Incoming references”和“Outgoing references”就是其中一种功能。

    eclipse 内存分析工具(MAT) 1.2.1

    Eclipse内存分析工具(MAT,Memory Analyzer Tool)是一款强大的Java应用程序内存分析工具,它能够帮助开发者定位和解决Java应用中的内存泄漏问题。MAT 1.2.1是该工具的一个版本,提供了更稳定和高效的内存分析功能...

    内存分析工具MAT

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

    基于eclipse的java内存分析工具MAT

    9. **DOM分析器**:对于处理XML的Java应用,MAT提供了DOM分析器,可以识别可能导致内存问题的大型XML文档。 10. **自定义查询**:用户还可以使用OQL(Object Query Language)编写自定义查询,进一步探索内存使用...

    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提供了丰富的功能和视图,使得复杂的内存问题变得...

    MAT工具(基于Eclipse的内存分析工具)+MAT工具使用说明.docx

    MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存...

    jmap Eclipse内存分析工具.rar

    而Eclipse Memory Analyzer Tool (MAT)是一款强大的图形化内存分析工具,它能够帮助我们分析heapdump文件,找出内存泄漏的源头。本篇文章将详细介绍`jmap`和MAT的使用及其在内存分析中的作用。 首先,`jmap`是Java ...

    Eclipse MAT:Java内存分析的必备中文指南

    ### Eclipse MAT:Java内存分析的必备中文指南 #### 一、引言 Eclipse Memory Analyzer Tool(MAT)是一款专门用于Java应用程序内存分析的强大工具。它不仅适用于初学者,也深受经验丰富的开发者的喜爱。MAT可以...

    内存堆栈分析工具MAT 64bit软件(Memory Analysis Tool)

    MAT(Memory Analyzer Tool)是一款强大的64位内存分析工具,由Eclipse基金会开发,专为Java开发者和运维人员设计,用于检测和诊断内存泄漏问题。 MAT提供了一个直观的用户界面,支持对.hprof文件进行深度分析,...

    Android 内存泄露 Mat工具分析

    "Android 内存泄露 Mat工具分析" Android 内存泄露是一个常见的问题,它会导致应用程序的性能下降,甚至崩溃。Memory Analyzer Tool(MAT)是一个功能强大且广泛使用的内存泄露分析工具。本文将详细介绍如何使用 ...

    MAT Eclipse MemoryAnalyzer java性能分析

    MAT,全称Memory Analyzer Tool,是由Eclipse基金会开发的一款强大的Java内存分析工具。它主要用于诊断Java应用程序中的内存泄漏和理解对象内存占用情况,是Java性能优化的重要助手。在这个"MAT Eclipse Memory...

    最新版mat java内存分析工具

    8. **Pluggable Analyzers**:MAT还支持扩展,开发者可以编写自己的分析器来处理特定的内存问题或满足特定需求。 9. **Export功能**:MAT允许将分析结果导出为HTML、CSV或其他格式,方便共享和离线查看。 在使用...

    mac mat jvm gc 内存分析

    MAT(Memory Analyzer Tool)是由Eclipse基金会提供的一个强大的分析工具,专门用于分析Java堆内存,帮助开发者诊断和解决内存相关的问题。本文将深入探讨MAT的使用、JVM GC的工作原理以及如何进行Mac环境下的内存...

    mac_mat android内存泄漏分析工具

    MAT(Memory Analyzer Tool)是由Eclipse基金会开发的一个强大的Java内存分析工具。尽管主要面向Java应用,但通过扩展,MAT也可用于分析Android应用的.hprof文件。这种文件格式是Android系统用于记录Dalvik虚拟机堆...

    MAT java memory 分析 内存分析

    MAT(Memory Analyzer Tool)是Eclipse基金会开发的一款强大的Java内存分析工具,主要用于诊断Java应用程序的内存泄漏和性能问题。在Java应用中,内存泄漏通常是因为某些对象被长时间保留在全局数据结构,如HashMap...

Global site tag (gtag.js) - Google Analytics