本文主要是介绍jvisualvm之visual gc插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
插件的安装
- 首先在jdk安装目录下的bin文件中打开jvisualvm。
- 然后在点击工具-插件,在可可用插件列表中下载安装visual gc插件
- 最后重启jvisualvm。
介绍
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。在JDK_HOME/bin(默认是C:\Program Files\Java\jdk1.6.0_13\bin)目录下面,有一个jvisualvm.exe文件,双击打开,从UI上来看,这个软件是基于NetBeans开发的了。
VisualVM 提供了一个可视界面,用于查看 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的基于 Java 技术的应用程序的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序或远程主机上运行的应用程序的相关数据。此外,还可以捕获有关 JVM 软件实例的数据,并将该数据保存到本地系统,以供后期查看或与其他用户共享。
visual gc插件
打开插件,会出现如下图:
Spaces
Metaspace
Metaspace 区域位于堆外,所以它的最大内存大小取决于系统内存,而不是堆大小,我们可以指定 MaxMetaspaceSize 参数来限定它的最大内存。
Metaspace 是用来存放 class metadata 的,class metadata 用于记录一个 Java 类在 JVM 中的信息,包括但不限于 JVM class file format 的运行时数据:
- Klass 结构,这个非常重要,把它理解为一个 Java 类在虚拟机内部的表示吧;
- method metadata,包括方法的字节码、局部变量表、异常表、参数信息等;
- 常量池;
- 注解;
- 方法计数器,记录方法被执行的次数,用来辅助 JIT 决策;
- 其他
当一个类被加载时,它的类加载器会负责在 Metaspace 中分配空间用于存放这个类的元数据。只有当这个类加载器卸载的时候,这个空间才会被释放。所以,只有当这个类加载器加载的所有类都没有存活的对象,并且没有到达这些类和类加载器的引用时,相应的 Metaspace 空间才会被 GC 释放
Old Eden S0 S1
分别对应老生代、伊甸园空间、幸存者空间的内存使用情况
Graphs
Graphs显示了作为时间函数的各种统计值。图形水平轴的分辨率由 interval命令行参数确定,其中每个样本占用2 个像素的屏幕区域。每个显示的高度取决于正在绘制的度量。
Compile Time
此面板绘制了将 Java 字节码编译为本机代码所花费的时间。此显示的高度未缩放到任何特定值。此图中的非零值表示编译活动发生在最后一个时间间隔内。窄脉冲表示相对较短的持续时间,而宽脉冲表示较长的持续时间。标题栏显示了应用程序启动后编译任务的数量和累计编译时间。
Class Loader Time
该面板绘制了类加载和卸载活动所花费的时间。此显示的高度未缩放到特定值。此图中的非零值表示在最后一个时间间隔内发生了类加载活动。窄脉冲表示相对较短的持续时间,而宽脉冲表示较长的持续时间。标题栏表示自应用程序启动以来加载和卸载的类的数量以及累积的类加载时间。
GC Time
该面板绘制了垃圾收集活动所花费的时间。此显示的高度未缩放到任何特定值。此图中的非零值表示在最后一个时间间隔内发生了垃圾收集活动。窄脉冲表示相对较短的持续时间,而宽脉冲表示较长的持续时间。标题栏显示了应用程序启动后的 GC 事件总数和累计 GC 时间。
如果目标 JVM 维护了hotspot.gc.cause 和hotspot.gc.last_cause 计数器,GC 事件的原因也将显示在该图的标题栏中
Eden Space
该面板绘制了伊甸园空间随时间的使用情况。伊甸园空间是构成年轻一代的三个空间之一。此面板的高度是固定的,默认情况下,数据会根据空间的当前容量进行缩放。由于空间的当前容量可以根据收集器策略动态变化,因此随着空间的缩小和增长,可能会出现视觉伪影。
Survivor 0 and Survivor 1
幸存者面板绘制了两个幸存者空间随时间的使用情况。Survivor Spaces 是剩下的两个空间组成年轻代。这些面板中的每一个的高度都是固定的,默认情况下,数据会根据相应空间的当前容量进行缩放。由于幸存者空间的当前容量可以根据收集器策略动态变化,因此随着空间的缩小和增长,可能会出现视觉伪影。
标题栏在括号中显示空间的名称及其最大和当前容量,然后是空间的当前利用率。
Old Gen
老一代面板绘制了老一代随时间的使用情况。老一代由一个空间组成。面板的高度是固定的,默认情况下,数据会根据空间的当前容量进行缩放。由于空间的当前容量可以根据收集器策略动态变化,因此随着空间的缩小和增长,可能会出现视觉伪影。
Histogram
Histogram窗口是最下面的窗口。 它由两个面板组成, 参数面板和 直方图面板。
参数_ 面板显示幸存者空间的大小和控制年轻代提升行为的参数。在每次年轻代收集之后,在收集中幸存但未提升的对象仍保留在幸存者空间中。每次在年轻代收集中存活时,对象的年龄都会增加,直到对象的年龄达到由 TenuringThreshold 变量定义的最大年龄,该变量在 1 和 MaxTenuringThreshold-1 之间变化,具体取决于幸存者空间的利用率。如果幸存者空间溢出,则将最旧的对象提升到老年代,直到空间利用率不超过 DesiredSurvivorSize。
直方图面板显示最后一次年轻代收集后活动幸存者空间中对象的 年龄分布快照。显示由 32 个大小相同的区域组成,每个区域代表每个可能的对象年龄。每个区域代表 100% 的活动幸存者空间,并填充有彩色区域,表示给定年龄的对象所占据的幸存者空间百分比。
当目标 JVM 使用并行年轻代收集器 (-XX:+UseParallelGC) 启动时,不会显示 Survivor Age Histogram 窗口。并行年轻代收集器不维护幸存者年龄直方图,因为它应用不同的策略来维护幸存者空间中的对象。
这篇关于jvisualvm之visual gc插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!