分析视图简介

更新时间:

Java堆分析中每个视图的主要功能

综合报表

列出堆转储的基础信息,同时概括的列出堆中占比最大的一些类、对象、类加载器等信息。综合报表可以看作是其他视图的一个摘要,将其他视图中最重要的信息摘要出来。我们可以获得堆的基本使用情况, 比如对象数量。此外还提供了按实现内存占用大小排序的 Java 类型饼图, 帮助用户快速定位占用内存最多的类型。

对象报表

以可视化的形式列出堆中哪些对象最多,占比最大,哪些可能有潜在问题

类报表

以可视化的形式列出堆中哪些类型的对象最多,占比最大,哪些可能有潜在问题

支配关系

表示对象的支配关系的图。假如对象A支配B,就表示垃圾回收器必须先释放B对象,然后才能释放A对象。以此关系构造的图就叫做对象支配图,该视图是堆分析中最重要的视图,它展示了堆中占比最大的是何种对象,以及该对象为何仍然存活(可以通过GC根路径查看)。

数量统计

根据聚合类型的不同,列出不同的直方图。比如可以按类聚合,列出堆中所有Foo类型的对象数量,对象大小等。

不可达类型

搜集堆中所有不可达对象,然后按照类型聚合。

系统属性

列出所有系统属性(即-Dprop=value),包括用户名、JDK版本、JDK提供商、Java Home等信息。

类加载器

列出堆中所有类加载器,以及该类加载所加载的类。

线程信息

线程信息视图给出了应用当前的线程情况, 可以用于查看线程的相关信息: 线程名, 堆占用情况, 调用栈信息, 以及局部变量等。通过该视图用户可以分析线程过多, 死锁, 调用栈过深等问题

堆外内存

有时候应用会出现物理内存使用越来越多的情况, 而堆外内存的不合理使用可能是导致这个情况的原因之一。该视图列出了应用目前使用的所有 java.nio.DirectByteBuffer 对象以及对应的堆外内存信息, 用于排查由于堆外内存导致的物理内存消耗过多的问题。注意堆外内存并不完全等价于DirectBuffer对象,由于DirectBuffer持有UNSAFE分配的堆外内存,它能在一定程度上反映堆外内存的情况(以及潜在的泄漏等问题)。

垃圾回收根

垃圾回收根是指垃圾回收器回收内存时,从根出发,寻找到存活对象,这里的根就是垃圾回收根,垃圾回收根在多个地方都存在,根据类型可以分为JNI、Thread、System Class等,该视图根据垃圾回收根类型列出该类型下所有垃圾回收根。

字符串

列出堆中所有字符串对象以及字符串值

重复类

不同类加载器(如LoaderFoo,LoaderBar)可能同时加载一个类。该视图列出所有重复加载的类,以及该类被哪些类加载器加载。