`

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内存分析器

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

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

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

    Java+内存分析工具+MAT

    MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。

    eclipse MAT(Memory Analyzer Tool)

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

    MAT工具让你像专家一样分析和解决Java内存问题

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

    mat_windows64位-2019年8月版.zip

    MemoryAnalyzer-1.9.1.20190826_mat.zip MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。

    Tomcat内存泄露问题排查

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

    MemoryAnalyzer-1.12.0.20210602-win32.win32.x86-64.zip

    资源名称:Eclipse Memory...Eclipse Memory Analyzer是一个快速而功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。 这个版本是支持jdk11的,上一个1.11的版本是jdk1.8的。收大家分就是因为下载比较难搞。

    MemoryAnalyzer-1.9.0.201906050844.zip

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

    MemoryAnalyzer-1.11.0.20201202-win32.win32.x86-64.zip

    Eclipse Memory Analyzer是一个快速而功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。 这个版本是支持jdk1.8的,下一个1.12版本直接是jdk11起步了。收大家分就是因为下载比较难搞。

    MemoryAnalyzer-1.9.1.win32.x86_64.zip

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

    MemoryAnalyzer-1.11.0.20201202-win32.win32.x86_64.zip.7z

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

    MemoryAnalyzer-1.9.2.20200115-macosx.cocoa.x86_64.zip

    Eclipse Memory Analyzer是一个快速且功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。使用Memory Analyzer分析具有数亿个对象的高效堆转储,快速计算对象的保留大小,查看谁阻止垃圾收集器收集对象,...

    Android典型技术模块开发详解

    16.2.3 内存分析MAT 16.2.4 如何避免内存泄漏 16.3 ActivityGroup 16.4 ViewStub 16.5 Bitmap内存溢出 16.5.1 图片预先缩放 16.5.2 普通的图片缩放方法 16.5.3 Dalvik虚拟机的堆内存分配 16.5.4 Bitmap对象及时释放 ...

    基于opencv3.1库的JAVA源码

    范例2-8-2 建立opencv的Mat矩阵方法2 55 范例2-8-3 方法3以单一元素指定 56 范例2-8-4 方法4全部以同一元素指定 57 范例2-8-5 方法5以个别单一元素指定 58 范例2-8-6 方法6以1维阵列指定建立 59 第3章 OpenCV基础...

Global site tag (gtag.js) - Google Analytics