死磕P7:JVM性能调优必知必会(二)

news2024/11/29 20:49:06

这是「死磕P7」系列第 008 篇文章,欢迎大家来跟我一起 死磕 100 天,争取在 2025 年来临之际,给自己一个交代。

接上篇,性能优化工具,尤其是图形化工具,绝对有 VisualVM 的一席之地,因为它几乎囊括了其他 JDK 工具的所有功能。

我们学习性能优化可不仅仅是为了应付面试,背一些八股文(当然,大部分情况是有用的,只是不可长久),我们需要真正掌握一门技能,对自己有一个交代。

VisualVM 是 JDK 自带的性能调优工具之一,通过它可以看到本地或者远程程序运行的情况,非常实用,今天我们就来学习一下它的使用吧。

$JAVA_HOME/bin 路径下有一个可执行程序 jvisualvm.exe , 没错,就是它了,双击打开它!

打开后的界面如图(Java 便写的图形界面):

在打开的界面中,左边是应用程序列表,分为本地和远程,只要你本地有java进程启动,他就会自动检测到,如我本地启动了 idea 和 visualvm ,第三个是激活 jetbrains 的工具。

我们再来随便启动一个小型的 springboot 项目看看,DemoApplication 就是我通过 idea 打开的一个只有一个 API 接口的 springboot 项目。

双击 DemoApplication 进程,右侧会打开程序的概述,概述主要列出了程序的 JVM 参数之类的。

点击 监控 可以看到当前程序所使用的资源情况,如 CPU, 堆,元空间,类,线程等

点击 线程 可以查看到当前程序运行的线程情况,如下面的 http-nio-8080-exec-* 表示 tomcat 的处理线程,目前处于驻留状态。

抽样器 和Profiler可以查看cpu和 内存的抽样情况(需要点内存,点CPU,抽样完,记得点一下停止),内存抽样:

CPU抽样:

内存 Profiler:

大家肯定会疑惑,怎么看不到 GC 的信息呢?别急,需要安装一个额外的 GC 插件。

安装完成后,重新打开进程就可以看到 VisualGC 选项卡了,这就非常直观的看到内存的区域划分了吧。

在这块的内容就可以看到包括Compile Time(编译时间)、Class Loader Time(类加载器加载类的时间)、GCTime(总GC的时间)、Eden、S0、S1、Old Gen(老年代大小)、Matadata(元空间的大小)。

监视 页面可以点击一下 执行垃圾回收 (相当于手动触发 GC),就可以观察到 GC 的变化,堆空间占用减少了

同时 Eden 区和 old 区内存也发生了变化

对于调优Java堆,主要关注的几块内容就是 Eden、S1、S0、Old Gen区域的大小变化,以及XXX collections、XXX ms属性的变化,他们分别表示:发生了多少次GC,以及发生GC过程的时间是多少。

VisualVM 还可以对堆存储文件进行分析,在监视页面可以执行 堆 Dump ,会将当前堆的情况进行转存生成一个 hprof 文件。

得到如下的 heapdump 文件信息

点击类,可以看到各个类所具有的实例数,双击某个类,可以具体看到实例数情况

好了,今天主要带大家认识了一下 VisualVM 的基本用法,VisualVM 是一个很强大很好用的 Java 性能分析工具,通过 VisualVM 可以清晰的了解到程序的 CPU, 内存 占用情况,再配上 GC 插件,更加清晰的看到 GC 的情况,非常有助于我们用来定位程序的卡点。

当然本文还没有涉及到解决具体的问题,后面的文章会继续探索通过 VisualVM 排查定位死锁及检测堆内存溢出的问题,敬请期待。

END

好了,今天的分享就到这里,关注公&号:新质程序猿,和我一起死磕 P7, 一起学习成长。

感谢大家的阅读,如果有任何异议的地方,欢迎指正,也欢迎大家公号找到我与我做朋友!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Node.js】图片水印

上传时加水印 用户上传原始图片->服务器:保留原始图片以及水印图片动态水印 用户上传原始图片->服务器:只保留原始图片 请求图片时,服务器动态加水印 根据业务需求自行更改操作,下面只讲最简单的给图片加水印。 主要使用到…

遨游智能终端赋能“危急特”场景,力推北斗技术规模化应用!

随着《北斗规模应用三年行动计划(2023-2025)》的发布,北京、湖北、重庆等多地出台北斗支持政策,北斗系统正稳步迈向“安全可控,泛在融合,开放兼容,服务全球”的发展目标。遨游通讯紧跟国家战略步…

10/11

一、ARM课程大纲 二、ARM课程学习的目的 2.1 为了找到一个薪资水平达标的工作(单片机岗位、驱动开发岗位) 应用层(APP) 在用户层调用驱动层封装好的API接口,编写对应的API接口 ----------------------------------------------------…

怎么做接口自动化测试

在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比&#xff0…

2024徐州科技企业-京东(无锡)基地数字经济交流座谈会

2024年6月4日下午,2024徐州科技企业-京东(无锡)基地数字经济交流座谈会在无锡市经开区京东(无锡)数字基地成功举办,本次活动由无锡经济开发区管理委员会指导,京东科技主办,无锡经开雪浪小镇未来园区有限公司、江南大学经贸学院协办。来自徐州市的40家高新技术企业以及行业专家、…

TTM-RE: Memory-Augmented Document-Level Relation Extraction(内存增强的文档级关系提取)

摘要 文档级关系提取旨在对文档中任意两个实体之间的关联进行分类。以往的文档级关系提取方法在充分利用不同噪声水平的大量训练数据的潜力方面是无效的。例如,在ReDocRED基准数据集中,在大规模、低质量、远距离监督的训练数据上训练的最先进的方法通常…

lnmp - RBAC方案设计与实现

概述 实践的是一套企业内部使用后台OA管理系统,对这套系统设计的RBAC(Role-Based Access Control,基于角色的访问控制),RBAC 方案旨在通过将后台用户与角色进行关联,再将角色与权限进行关联,实现对系统资源…

力扣之607.销售员

文章目录 1. 607.销售员1.1 题目说明1.2 准备数据1.3 解法1.4 结果截图 1. 607.销售员 1.1 题目说明 表: SalesPerson ------------------------ | Column Name | Type | ------------------------ | sales_id | int | | name | varchar | | salary | int | | commission_ra…

【CURL命令】命令行或脚本进行API测试

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 【CURL命令】命令行或脚本进行API测试 简介使用…

InfiniiVision HD3 系列示波器

_XLT_ InfiniiVision HD3 系列示波器 苏州新利通仪器仪表 使用带有定制专用集成电路 (ASIC) 的便携式示波器执行数字调试,该电路提供的垂直分辨率是其他通用示波器的四倍,注入噪声是其他通用示波器的一半。使用示波器进行调试&…

canvas:绘制点和点之间连线

效果图&#xff1a; <template><div class"home-box"><canvas id"canvas" /><div class"lightCircle" ref"circleRef" v-for"(item,index) in 5" :key"index"></div><div cla…

makefile与gdb的使用

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2024年10月11日 &#x1f4e8; 博主码云地址&#xff1a;渣渣C &#x1f4d5;参考书籍&#xff1a…

vue 解决高德地图Uncaught Error: Invalid Object: Pixel(NaN, NaN)

有点啰嗦&#xff0c;可以直接跳到最后看解决方法。 问题排查过程 原因起始于一个新需求&#xff1a;在编辑列表信息时需要修改设备位置。 按照文档一番操作&#xff0c;发现完美需求解决了。后续测试的时候就发现浏览器报错Uncaught Error: Invalid Object: Pixel(NaN, NaN)…

在 Notebook 中启动 FastAPI

如何在 Notebook 使用 FastAPI 对外提供 RestAPI&#xff0c;当我们测试完模型时&#xff0c;有事需要对外提供 API 进行测试。FastAPI 是 Python 中快速提供 Rest API 的框架&#xff0c;本文将对外实现一个 OCR 的图片转文字的服务。 OCR 服务 本文使用 GOT OCR 提供 OCR 识…

[Git] Git下载及使用 从入门到精通 详解(附下载链接)

前言 目录 Git概述 简介 下载 Git代码托管服务 Git常用命令 Git全局配置 获取Git仓库 在本地初始化一个Git仓库 从远程仓库克隆 基本概念 工作区文件状态 本地仓库操作 远程仓库操作 分支操作 标签操作 在IDEA中使用Git 在IDEA中配置Git 本地仓库操作 远程仓…

【unity框架开发7】对象池的使用,如何封装一个对象池管理器

文章目录 什么是对象池&#xff1f;对象池有什么用&#xff1f;对象池的原理对象池的实现1、从对象池获取对象2、回收对象3、回收所有对象4、预先往这个对象池中加载指定数量的游戏对象5、最终代码 封装对象池管理器1、对象池管理器代码2、测试调用3、生成和回收游戏对象时自动…

LLM基础常见面试题

#############【持续更新】############## LLM基础常见面试题 简单介绍一下大语言模型【LLMs】&#xff1f; 大模型&#xff1a;一般指1亿以上参数的模型&#xff0c;但是这个标准一直在升级&#xff0c;目前万亿参数以上的模型也有了。大语言模型&#xff08;Large Languag…

在 Windows 11 安卓子系统中安装 APK 的操作指南

这个软件好像不可以在纯android系统中使用&#xff08;不知道是缺了什么&#xff09;&#xff0c;其他对于android的虚拟机要不缺少必要功能组件&#xff0c;要不性能过于低下。本方法致力于在带有谷歌框架WSA中运行该APK 在 Windows 11 安卓子系统中安装 APK 的操作指南 本指…

渗透测试系列之靶机渗透

Helpline是一个困难的靶机&#xff0c;知识点涉及EFS解密和ME SDP的多个漏洞&#xff0c;包括XXE漏洞、LFI\任意文件下载漏洞、身份认证绕过漏洞以及远程代码执行漏洞等. 通关思维导图 0x01 侦查 端口探测 首先使用nmap进行端口扫描 nmap -Pn -p- -sV -sC -A 10.10.10.13…

Obsidian复制代码块代码正确方式

最近在用obsidain做笔记&#xff0c;整体使用下来感觉不错&#xff0c;尤其是强大的检索功能&#xff0c;但是刚才使用其内置的复制代码块功能时&#xff0c;却被恶心到了。 现有背景是&#xff1a;我有一个pydantic的 code block&#xff0c;编辑器处于编辑模式如下&#xff…