专业的JAVA编程教程与资源

网站首页 > java教程 正文

[JVM] MAT进阶使用(mat jvm分析byte数组)

temp10 2024-11-17 01:51:56 java教程 11 ℃ 0 评论

相关概念

GC Root

JVM通过可达性来判断对象的存活与否。


[JVM] MAT进阶使用(mat jvm分析byte数组)

基本思想:以GC Roots的对象作为起始点向下搜索,搜索形成的路径称为引用链,当一个对象到GC Roots没有引用链时(不可达),则该对象判定为可回收对象,反之就不可回收对象。

GC Roots可以是以下任意对象

  • 一个在CurrtentThread(当前对象)的CallStack(调用栈)上的对象,如方法参数、局部变量
  • 线程自身
  • SystemClassLoader(系统类加载器)加载的类
  • NativeCode(本地代码)保留的活动对象

内存泄露

内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点。

  • 这些对象是可达的,即在有向图中,存在通路可以与其相连;
  • 这些对象是无用的,即程序以后不会再使用这些对象。

如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。

强(strong)、软(soft)、弱(weak)、虚(phantom)引用

  • Strong reference. 强引用。 比如new创建的对象就是强引用
  • Soft reference. 软引用。GC时如果内存不足则回收
  • Weak reference. 弱引用。GC时直接回收
  • Phantom reference. 虚引用。 随时可能回收。用来跟踪对象回收的活动

MAT介绍

overview

内存使用情况总览


Histogram 类个数直方图

展示某个特定类的对象个数和每个对象使用的内存


可以通过正则表达式来过滤,更好的专注在关注的对象上。



Shallow Heap

Shallow Heap是指对象本身占用的内存大小,不包括它的引用对象。针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。针对数组类型 的对象,它的大小是数组元素对象的大小总和。

Retained Heap

Retained Heap = 当前对象大小 + 当前对象直接或间接引用的对象的大小总和。

相当于对象被GC之后,可以从Heap上释放的内存大小。

(注:实际释放的内存大小需要根据是否有被GCRoot引用,是否可回收影响)

Retained Heap大小有两种不同的计算方式。

  • Calculate Minimum Retained Size(quick approx..) 快速估算
  • Calculate Precise Retained Size 精确计算

Dominator tree 支配树,对象引用关系树

如果所有指向对象Y的路径都经过对象X,则认为对象X支配对象Y。


Top Consumers 内存消耗排行


Leak Suspects 可疑泄露报告

显示MAT发现的可能导致内存泄漏的地方,和用于分析这些发现的工具和图表的链接。

MAT进阶

Immediate Dominators 查看类的支配树(直接引用)

在直方图Histogram中,可以查看特定类的支配树。



可以看到这个ShopDto实例在哪些类中引用。


Path to GC Roots 查看GC Roots引用链

  • with all references 查看所有的引用链
  • exclude weak references 过滤弱引用
  • exclude soft references 过滤软引用
  • exclude phantom references 过滤虚引用
  • exclude weak/soft references 过滤弱/软引用
  • exclude phantom/soft references 过滤虚/软引用
  • exclude phantom/weak references 过滤虚/弱引用
  • exclude phantom/weak/soft etc. references 过滤虚/弱/软引用
  • exclude custom fields… 自定义过滤

List objects 查看当前Object引用,被引用对象

Show objects by class (同上,以Class的方式查看)


  • with outgoing references 查看被该对象引用的对象(我引用了谁)
  • with incoming references 查看引用到该对象的对象(谁引用了我)

with outgoing references 我引用了谁


wiwith incoming references 谁引用了我



Compare To Another Heap Dump 内存快照对比



Show Retained Set 查找GC是将被回收的对象集合


Collections fill ratio. 集合填充比例

查看预分配内存能力的集合,如HashMap, ArrayList的填充比例


最多使用80%,有20%的空间浪费。

Map Collision Ratio MapHash碰撞比例

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表