jvisualvm之visual gc插件

2023-10-25 00:30
文章标签 visual 插件 gc jvisualvm

本文主要是介绍jvisualvm之visual gc插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

插件的安装

  1. 首先在jdk安装目录下的bin文件中打开jvisualvm。
  2. 然后在点击工具-插件,在可可用插件列表中下载安装visual gc插件
  3. 最后重启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 的运行时数据:

  1. Klass 结构,这个非常重要,把它理解为一个 Java 类在虚拟机内部的表示吧;
  2. method metadata,包括方法的字节码、局部变量表、异常表、参数信息等;
  3. 常量池;
  4. 注解;
  5. 方法计数器,记录方法被执行的次数,用来辅助 JIT 决策;
  6. 其他

当一个类被加载时,它的类加载器会负责在 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插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278780

相关文章

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

eclipse安装subversion(SVN)版本控制插件

陈科肇 查看插件更新站点 网址:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 网站截图: 根据自己的eclipse版本,选择需要的更新站点. 使用eclipse集成subservion插件 Help > Install New Software…> 等待下载安装插件…

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是

mybatis框架基础以及自定义插件开发

文章目录 框架概览框架预览MyBatis框架的核心组件MyBatis框架的工作原理MyBatis框架的配置MyBatis框架的最佳实践 自定义插件开发1. 添加依赖2. 创建插件类3. 配置插件4. 启动类中注册插件5. 测试插件 参考文献 框架概览 MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射,为开发者提供了极大的灵活性和便利性。以下是关于M

PrestaShop免费模块/插件/扩展/工具下载

PrestaShop免费模块/插件/扩展/工具下载 PrestaShop免费模块 适用于您的电子商务网站的PrestaShop模块 现有超过3,000个PrestaShop模块可帮助您自定义在线商店,增加流量,提高转化率并建立客户忠诚度。 使您的电子商务网站成功! 下载(超过142+之多的PrestaShop官网认证的免费模块) 标签PrestaShop免费, PrestaShop免费工

zblog自定义关键词和描述,zblog做seo优化必备插件

zblog自定义关键词和描述,zblog做seo优化必备插件     首先说下用到的一款插件:CustomMeta自定义数据字段 ,我们这里用到的版本是1.1,1.1+版增加了列表页标签支持!     插件介绍:文章,分类等添加自定义数据字段。1.1+版适用于 Z-Blog 2.0 B2以上版本。     在zblog2.0beta1里面,这个插件是集成到了程序里面,beta2里面默认没有了