JVM学习-MAT

devtools/2024/9/25 5:28:47/
MAT(Memory Analyzer Tool)
基本概述
  • Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况
  • MAT是基于Eclipse开发的,不仅可以单独使用,还能以插件方式嵌入Eclipse中使用,是一款免费的性能分析工具
获取堆dump文件
  • dump文件内容
    • MAT可以分析heap dump文件,在进行内存分析时,只要获得了反映当前设备内存映像的hprof文件,通过MAT打开就能直观地看到当前的内存信息
    • 这些内存信息包含
      • 所有的对象信息,包括对象实例,成员变量,存储于栈中的基本数据类型值和存储于堆中的其他对象的引用值
      • 所有的类信息,包括classloader、类名称、父类、静态变量等
      • GCRoot到所有的这些对象的引用路径
      • 线程信息,包括线程的调用栈及此线程的线程局部变量(TLS)
  • 获取dump文件
    • 通过jmap工具生成,可以生成任意一个java进程的dump文件
java">C:\Users\Administrator\IdeaProjects\jvm>jmap -dump:format=b,file=d:\mat\a.hprof 11896
Dumping heap to D:\mat\a.hprof ...
Heap dump file created
  • 通过配置JVM参数生成
    • 选项-XX:+HeapDumpOnOutOfMemoryError 或 -XX:+HeapDumpBeforeFullGC
    • 选项 -XX:HeapDumpPath所代表的含义就是当程序出现OOM时,将会在相应目录下生成一份dump文件,如果不指定,则在当前目录生成dump文件
    • 生产环境中几乎不可能在线对其进行分析,都采用离线分析,因此使用jmap+MAT工具分析dump文件
  • 使用VisualVM可以导出堆dump文件
  • 使用MAT直接从活动Java程序中导出堆快照
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
分析堆dump文件
  • histogram(直方图):展示了各个类的实例数目以及这些实例的shallow heap或retainedheap的总和
  • thread overview
    • 查看系统中的Java线程
    • 查看局部变量的信息
  • 获取对象相互引用的关系
    • with outgoing references
      在这里插入图片描述

    • with incoming references

  • 浅堆与深堆
    • shallow heap(浅堆)
      • 浅堆是指一个对象所消耗的内存,在32位系统中,一个对象引用会占用4个字节,一个int类型会占据4个字节,long型变量占据8字节,每个对象头需要占用8个字节,根据堆快照格式不同,对象的大小可能会向8字节对齐
      • 以String为例:2个int值共占用8个字节,对象引用占用4个字节,对象头8字节,合计20字节,向8字节对齐,故占24字节,这24字节为String对象的浅堆大小,它与String的value实际值无关,无论字符串长度如何,浅堆大小始终是24字节
    • retained heap(深堆)
      • 保留集(Retained Set):对象A的保留集指当对象A被垃圾回收后,可以被释放的所有对象集合(包括对象A本身),即对象A的保留集可以被认为是只能通过对象A被直接或间接访问到的所有对象的集合,指仅被对象A所持有的对象的集合
      • 深堆:指对象的保留集中所有的对象的浅堆大小之和
      • 注:浅堆指对象本身所占用的内存,不包含其内部引用对象的大小,一个对象的深堆指只能通过该访问到的(直接或间接)所有对象的浅堆之和,即对象被回收,可以释放真实空间
    • 对象实际大小
      • 对象的实际大小定义为一个对象所能触及的所有对象的浅堆大小之和,也就是对象的大小,与深堆相比,这个在日常开发中更为直观和被人接受,但实际这个概念与垃圾回收无关
        在这里插入图片描述
  • 支配树(Dominator Tree)
    • MAT提供了一个称为支配树的对象图,支配树体现了对象实例间的支配关系。在对象引用图中,所有指向对象B的路径都经过A,则认为对象A支配对象B,如果对象A是离对象B最近的一个支配对象,则认为对象A为对象B的直接支配者,支配树是基于对象间的引用图所建立的,它有以下基本特性
      • 对象A的子树表示对象A的保留集,即深堆
      • 如果对象A支配对象B,那么对象A的直接支配者也支配对象B
      • 支配树的边与对象引用图的边不直接对应
支持使用OQL语言查询对象信息

待续… …


http://www.ppmy.cn/devtools/46462.html

相关文章

NDIS网络接口

在windows发行版本中,真的存在一个 ndis.sys 的驱动文件,和我们认知的不太一样,它真的是一个DLL,NDIS 库打包在 Ndis.sys(一个内核模式导出库)中,作为一组函数,强调宏以获得最佳性能…

功能强大且专业的PDF转换软件PDF Shaper Professional 14.2

PDF Shaper Professional是一款适用于Windows的程序,可让您在计算机上处理PDF文件。 要开始使用PDF Shaper Professional,您需要在Windows计算机上下载并安装该程序。您还应该有合适的驱动程序和编解码器来处理计算机上的文本和图形。 安装程序后&#…

ansible批量漏洞升级openssh版本

1、ansible宿主机准备好环境,并写好hosts文件 [rootoxidized ansible]# cat hosts [all] 10.10.200.33 10.10.200.34 10.10.200.35跑playbook之前记得提前发送秘钥 ssh-copy-id 10.10.200.33/34/352、下载好安装包,然后编写yml [rootoxidized ansible]…

数字孪生在气象灾害防治中的重要贡献

数字孪生技术在气象灾害防治中正发挥着越来越重要的作用。数字孪生是指通过数字化方式在虚拟空间中构建与现实世界对应的虚拟模型,通过实时数据和模拟技术进行动态映射和交互。利用数字孪生技术,气象部门可以更高效、更精准地监测、预测和应对气象灾害&a…

Docker安装Bitbucket

centos7版本 [rootlocalhost ~]# cat /etc/os-release NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI_COLOR"0;31"…

NLP基础——语言模型(动手学深度学习)

语言模型 联合概率 给定文本序列 x 1 , ⋯ , x t x_1,\cdots,x_t x1​,⋯,xt​,语言模型的目标是估计联合概率 P ( x 1 , ⋯ , x t ) P(x_1,\cdots,x_t) P(x1​,⋯,xt​). 这里的 x t x_t xt​ 可以认为是文本序列在时间步 t t t 处的观测或标签,而…

前端知识1-4:性能优化进阶

性能优化进阶 Navigation Timing API navigationStart / end 表示从上一个文档卸载结束时 > 如果没有上一个文档,这个值和fetchStart相等 unloadEventStart / end 标识前一个网页unload的时间点 redirectStart / end 第一个http重定向发生和结束的时间 fetch…

【上海大学计算机组成原理实验报告】六、内存系统实验

一、实验目的 学习内存访问机制。理解代码和数据的分区存放原理和技术。 二、实验原理 根据实验指导书的相关内容,地址寄存器MAR用来存放要进行读或写的存储器EM的地址。其内容经数据总线DBUS写入,因此必须在数据总线上具有数据后,配合MAR允…