潮州南桥市场中国建设银行网站,好搜搜索,网址大全360,中国核工业第二二建设有限公司MAT(Memory Analyzer Tool)
基本概述
Java堆内存分析器#xff0c;可以用于查找内存泄漏以及查看内存消耗情况MAT是基于Eclipse开发的#xff0c;不仅可以单独使用#xff0c;还能以插件方式嵌入Eclipse中使用#xff0c;是一款免费的性能分析工具
获取堆dump文件
dump…MAT(Memory Analyzer Tool)
基本概述
Java堆内存分析器可以用于查找内存泄漏以及查看内存消耗情况MAT是基于Eclipse开发的不仅可以单独使用还能以插件方式嵌入Eclipse中使用是一款免费的性能分析工具
获取堆dump文件
dump文件内容 MAT可以分析heap dump文件在进行内存分析时只要获得了反映当前设备内存映像的hprof文件通过MAT打开就能直观地看到当前的内存信息这些内存信息包含 所有的对象信息包括对象实例成员变量存储于栈中的基本数据类型值和存储于堆中的其他对象的引用值所有的类信息包括classloader、类名称、父类、静态变量等GCRoot到所有的这些对象的引用路径线程信息包括线程的调用栈及此线程的线程局部变量(TLS) 获取dump文件 通过jmap工具生成可以生成任意一个java进程的dump文件
C:\Users\Administrator\IdeaProjects\jvmjmap -dump:formatb,filed:\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文件生产环境中几乎不可能在线对其进行分析都采用离线分析因此使用jmapMAT工具分析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语言查询对象信息
待续… …