JVM性能调优准备之Visual GC插件

文章目录

  • jvisualvm安装Visual GC插件
  • Visual GC插件功能介绍
    • 区域划分
      • spaces区域
      • Graphs区域
      • Histogram区域
    • oracle官方文章介绍

jvisualvm安装Visual GC插件

  1. 以管理员身份打开cmd命令行窗口查看JDK版本(Visual GC插件需要对应JDK的版本)
    在这里插入图片描述

  2. 在cmd窗口输入 jvisualvm 命令打开Java VisualVM工具(JDK自带)
    在这里插入图片描述
    在这里插入图片描述

  3. 点击jvisualvm 工具-》插件-》可用插件
    找找里面有没有Visual GC插件,有的话就勾上,然后安装。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    安装失败,不要着急!因为安装插件的网站已经更新地址了,修改地址即可。

  4. 去visualvm的新访问地址,找到自己JDK对应版本的插件下载下来
    (1) 访问新地址:https://visualvm.github.io/index.html
    在这里插入图片描述
    (2)进入 “Plugins” 》“Plugins Centers”,找到对应自己JDK版本的更新地址
    在这里插入图片描述
    (3)将地址复制保存起来。
    【https://visualvm.github.io/uc/8u131/updates.xml.gz】

  5. 进入jvisualvm 工具-》插件-》设置
    在这里插入图片描述
    点击“编辑”按钮,修改替换为之前保存起来的最新地址。如依旧出现第3步的报错多重试几次。

  6. 安装VisualGC插件
    在这里插入图片描述

  7. 双击本地pid进程,即可看到VisualGC
    在这里插入图片描述

Visual GC插件功能介绍

区域划分

spaces区域

在这里插入图片描述

代表虚拟机内存分布情况。从图中可以看出,虚拟机被分为Metaspace、Old、Eden、S0、S1
注意:如果对每个区域基本概念不是很熟悉的可以先了解下java虚拟机运行时数据区概念。
1.1)
perm:英文叫做Permanent Generation,我们称之为永久代。(根据深入java虚拟机作者说明,这里说法不是很正确,因为hotspot虚拟机的设计团队选择把GC分代收集扩展至此而已,正确的应该叫做方法区或者非堆)。
Meta space: 在 Java 8 中取代了 Perm space,是一块动态的内存区域,用于存储类的元数据信息,包括类名、方法名、字段名、注解等。 Meta space 是在 Java 堆中分配的,它不再有固定的大小限制,而是能够根据应用程序的需要动态增长或缩小。另外,Meta space 中的元数据信息可以通过 JVM 参数进行调整和控制,例如设置元数据的最大大小。

Meta space 和 Perm space 的区别在于:

  • 存储位置:Perm space 是 JVM 堆外的一块内存,而 Meta space 是在 Java 堆中分配的。

  • 大小限制:Perm space 有固定的大小限制,而 Meta space 是动态分配的,可以根据需要动态增长或缩小。

  • 控制方式:Perm space 的大小和回收方式需要通过 JVM 参数进行调整和控制,而 Meta space 的元数据信息可以通过 JVM 参数进行调整和控制。

    1.1.1)
    通过VM Args:-XX:PermSize=128m -XX:MaxPermSize=256m 设置初始值与最大值

    1.2)
    heap:java堆(java heap)。它包括老年代(图中Old区域)和新生代(图中Eden/S0/S1三个统称新生代,分为Eden区和两个Survivor区域),他们默认是8:1分配内存

    1.2.1)
    通过VM Args:-xms512m -Xmx512m -XX:+HeapDumpOnOutofMemoryError-Xmn100m -XX:SurvivorRatio=8 设置初始堆内存、最大堆内存、内存异常打印dump、新生代内存、新生代内存分配比例(8:1:1),因为Heap分为新生代跟老年代,所以512M-100M=412M,老年代就是412M(初始内存跟最大内存最好相等,防止内存不够时扩充内存或者Full GC,导致性能降低)

Graphs区域

在这里插入图片描述

内存使用详细介绍
2.1)Compile Time(编译时间):14483 compiles 表示编译总数,35.340s表示编译累计时间。一个脉冲表示一次JIT编译,窄脉冲表示持续时间短,宽脉冲表示持续时间长。
2.2)Class Loader Time(类加载时间): 28779 loaded表示加载类数量, 11 unloaded表示卸载的类数量,1m 4.567s表示类加载花费的时间
2.3)GC Time(GC Time):47 collections表示垃圾收集的总次数,525.859s表示垃圾收集花费的时间,last cause表示最近垃圾收集的原因
2.4)Eden Space(Eden 区):括号内的525.375M表示最大容量,34.125M表示当前容量,后面的17.669M表示当前使用情况,48 collections表示垃圾收集次数,527.320s表示垃圾收集花费时间
2.5)Survivor 0/Survivor 1(S0和S1区):括号内的1.285G表示最大容量,261.387M表示当前容量,之后的值是当前使用情况
2.6)Old Gen(老年代):括号内的1.285G表示最大容量,261.387M表示当前容量,之后的172.638表示当前使用情况,0collections表示垃圾收集次数 ,0s表示垃圾收集花费时间
2.7)Metaspace(元空间):括号内的1,152G表示最大容量,183.008M表示当前容量,之后的172.638M表示当前使用情况

Histogram区域

在这里插入图片描述
survivor区域参数跟年龄柱状图

 3.1)Tenuring Threshold:表示新生代年龄大于当前值则进入老年代。
 
 3.2)Max Tenuring Threshold:表示新生代最大年龄值。
 
 3.3)Tenuring Threshold与Max Tenuring Threshold区别:Max Tenuring Threshold是一个最大限定,所有的新生代年龄都不能超过当前值,而Tenuring Threshold是个动态计算出来的临时值,一般情况与Max Tenuring Threshold相等,如果在Suivivor空间中,相同年龄所有对象大小的总和大于Survivor空间的一半,则年龄大于或者等于该年龄的对象就都可以直接进入老年代(如果计算出来年龄段是5,则Tenuring Threshold=5,age>=5的Suivivor对象都符合要求),它才是新生代是否进入老年代判断的依据。

  3.4)Desired Survivor Size:Survivor空间大小验证阙值(默认是survivor空间的一半),用于Tenuring Threshold判断对象是否提前进入老年代。
  
  3.5)Current Survivor Size:当前survivor空间大小
  
  3.6)histogram柱状图:表示年龄段对象的存储柱状图
  
  3.7)如果显示指定-XX:+UseParallelGC --新生代并行、老年代串行收集器 ,则histogram柱状图不支持当前收集器

oracle官方文章介绍

http://www.oracle.com/technetwork/java/visualgc-136680.html
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/257167.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭秘`v-if`和`v-show`的区别:选择正确指令的技巧(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

AI抠图软件哪个好用?推荐这三款抠图工具给你

AI抠图软件哪个好用?你是否听说过AI抠图这个操作呢?简单来说,抠图就是一种对图像进行处理的技术,它的目的是将图片中的某些区域去除或者替换。比如,如果你有一张背景很杂乱的图片,你想把背景去掉&#xff0…

Leetcode—49.字母异位词分组【中等】

2023每日刷题&#xff08;六十四&#xff09; Leetcode—49.字母异位词分组 实现代码 class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string, vector<string>> mp;for(auto str: s…

uniapp图片上传说明

目录 1.文件上传组件 2.单文件上传 3.多文件上传 4.注意点 1.文件上传组件 前端上传组件使用uni-file-picker&#xff0c;可以自行进行下载使用。默认上传到绑定的服务空间&#xff0c;配置属性auto-upload为false关闭自动上传&#xff0c;可以限定上传的是图片还是文件&am…

【PHP入门】1.3-数据类型、转换、判断

-数据类型- 数据类型&#xff1a;data type&#xff0c;在 PHP中指的是存储的数据本身的类型&#xff0c;而不是变量的类型。 PHP是一种弱类型语言&#xff0c;变量本身没有数据类型。 1.3.1PHP的八种数据类型 在PHP中将数据分为三大类八小类&#xff1a; 简单&#xff0…

JavaSE学习笔记 Day20

JavaSE学习笔记 Day20 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 上一篇 文章目录 JavaSE学习笔记 Day20十七、数据结构与算法17.1算法17.1.1冒泡排序17.1.2选择排序17.1.3插入排序17.1.4三个排序的区别 17.2顺序表17.2.1顺序表代码实现17.2.2顺…

JavaEE:线程池精讲

目录 一.什么是线程池 二.线程池的实现原理 &#x1f388;为什么要有工厂模式&#xff1f; 三.线程池的构造方法解读 &#x1f388;线程池的拒绝策略 四.自己实现一个线程池 一.什么是线程池 简单来说&#xff0c;线程池就好比一块鱼塘&#xff0c;鱼塘中的每条鱼就是一个线程…

HackTheBox - Medium - Windows - Authority

Authority 终于把easy的机器刷的八八九九了&#xff0c;开始新一轮的Medium机器&#xff0c;Medium难度以上的我都会写wp&#xff0c;保持学习&#xff0c;我的CRTO进度也快结束了。 Authority是一台中等难度的 Windows 计算机&#xff0c;它强调了错误配置、密码重用、在共享…

2023 英特尔On技术创新大会直播 |让更多人了解AI魅力

2023 英特尔On技术创新大会直播 |让更多人了解AI魅力 前言&#xff1a;主要领域:人工智能&#xff1a;使用 OpenVINO™ 落地边缘端生成式 AIOpenVINO™学习总结&#xff1a; 新一代 AI PC计算平台&#xff1a;新一代至强平台&#xff1a;边云协同&#xff1a;先进技术&#xff…

深入探索Git的高级技巧与神奇操作(分支,高效合并)

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 深入探索Git的高级技巧与神奇操作 前言强制推送的妙用1. 什么是强制推送&#xff1f;2. 为什么需要使用强制推送&#xff1f;3. 强制推送的风险与注意事项4. 如何正确、安全地执行强制推送步骤&#x…

JDK21+HADOOP3.2.2+Windows安装步骤

哈哈哈 最近转战大数据这块了&#xff0c;分享一下hadoop3.2.2的安装步骤 借鉴了不少大佬的文章&#xff0c;如有雷同&#xff0c;都是大佬们的 1.JDK安装 我选择的是JDK21 以下是下载网址和截图&#xff0c;这个没有太多的&#xff0c;一般下载最新的就可以 JDK: Java Down…

Golang学习之路一一Hello, World

Golang学习之路一一Hello, World golang工作目录下src下新建一个项目demo,如图: 在demo下新建hello_world.go文件,内容如下: package main //声明本文件的package名import "fmt" //import语言的fmt库——---用于输出func main() {fmt.Println("Hello, World!&…

【2.2操作系统】进程管理

目录 1.进程的基本概念2.进程的状态3.信号量与PV操作4.前趋图5.死锁6.银行家算法 1.进程的基本概念 &#x1f31f;进程是程序在一个数据集合上运行的过程&#xff0c;它是系统进行资源分配和调度的一个独立单位。它由程序块、进程控制块 (PCB) 和数据块三部分组成。 &#x1f…

一款视频行为分析系统,可轻松开发安全行为检测

系列版本介绍 基于视频行为分析系统v4系列版本可以在不用考虑流媒体音视频开发&#xff0c;编解码开发&#xff0c;界面开发等情况下&#xff0c; 只需要训练自己的模型&#xff0c;开发自己的行为算法插件&#xff0c;就可以轻松开发出任何你想要的安全行为检测&#xff0c;比…

浅谈云性能测试的关键要点

随着云计算的广泛应用&#xff0c;云性能测试成为确保云服务质量和性能的关键环节。云性能测试不仅涵盖了传统性能测试的方面&#xff0c;还需要考虑云环境的特殊性。以下是云性能测试的几个关键要点&#xff1a; 1. 模拟真实云环境 云环境具有虚拟化、弹性扩展等特点&#xff…

视频去水印怎么去掉?这三个去水印方法值得收藏

视频去水印怎么去掉&#xff1f;对于视频去水印&#xff0c;对于那些对去水印软件不是很熟悉的人来说&#xff0c;可能会感到有些困难。但是&#xff0c;不用担心&#xff0c;今天就来为大家介绍几种视频去水印软件和教你们视频去水印的详细步骤&#xff0c;让你们轻松去掉视频…

TOUGH系列软件实践技术应用

TOUGH系列软件是由美国劳伦斯伯克利实验室开发的&#xff0c;旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH系列软件采用模块化设计和有限积分差网格剖分方法&#xff0c;通过配合不同状态方程&#xff08;EOS模…

whisper深入-语者分离

文章目录 学习目标&#xff1a;如何使用whisper学习内容一&#xff1a;whisper 转文字1.1 使用whisper.load_model()方法下载&#xff0c;加载1.2 使用实例对文件进行转录1.3 实战 学习内容二&#xff1a;语者分离&#xff08;pyannote.audio&#xff09;pyannote.audio是huggi…

选数C语言

分析&#xff1a;这个题目主要解决两个问题 1.将数字选出来&#xff0c;不能重复的选出k个数字&#xff0c;并且要对选出来的数字进行求和 2.对求和的数字进行判断是否为素数&#xff0c;如果是就统计一次&#xff0c;如果不是就不统计 1.如果我们想选两两为一组的数字&#…

ansible远程操作主机功能和自动化运维

ansible 两个功能&#xff1a;1、远程操作主机功能 2、自动化运维&#xff08;play 剧本 yaml&#xff09; 简述&#xff1a; 是基于python开发的配置管理和应用部署工具。在自动化运维中&#xff0c;现在是异军突起。 Asible能批量配置&#xff0c;部署&#xff0c;管理上千…