详细介绍:JVM 性能诊断

news/2025/10/19 15:00:16/文章来源:https://www.cnblogs.com/tlnshuju/p/19150859

详细介绍:JVM 性能诊断

2025-10-19 14:58  tlnshuju  阅读(0)  评论(0)    收藏  举报

JVM参数

JVM 参数数量极多(官方文档中可配置参数超过千个),且不同 JDK 版本(如 JDK8/JDK11/JDK17)的参数支持存在差异(部分参数被废弃、新增或重命名)

参数的分类

  • 标准参数:以 - 开头,所有 JDK 版本通用,稳定且向后兼容(不会轻易废弃),主要用于基础配置。java -help
  • 非标准参数:以 -X 开头,特定 JDK 版本支持,可能在后续版本中调整,用于内存、GC 等核心配置。通过java -X查看非标准参数
  • 高级参数:以 -XX: 开头,用于细粒度控制 JVM 内部行为(如 GC 算法、编译阈值),通过java -XX:+PrintFlagsFinal当前 JDK 版本支持的所有-XX:开头的高级参数(包括默认值、是否可修改)。
  • 设置系统属性:以-D开头,在 Java 代码中,通过 System.getProperty() 方法读取,非jvm参数

核心 JVM 参数

内存配置参数:

垃圾回收(GC)参数:指定GC、GC 调优参数

JIT 编译参数:

监控与诊断参数(难题排查):

常见问题

OOM(Out of Memory,内存溢出)

  • 内存泄漏:脚本申请的内存使用完毕后,无法被垃圾回收器(GC)回收,未关闭的资源句柄、静态集合类滥用、对象生命周期过长、匿名内部类 / 闭包引用:匿名内部类会隐式引用外部类对象。
  • JVM内存配置过低:堆内存(Heap)栈内存(Stack)配置不足
  • 高并发 / 峰值流量冲击

频繁 GC(垃圾回收)

GC 执行次数异常增多、单次 GC 耗时过长(或总耗时占比过高),最终可能导致应用响应延迟、吞吐量下降,甚至触发 OOM(内存溢出)。日志中出现 GC overhead limit exceeded

JDK 自带工具(轻量、无依赖)

jps

查看当前运行的 Java 进程 ID(PID)

jps -l(显示进程 PID 和主类名)

jstat

实时监控 JVM 内存、GC 统计信息;

jstat -gcutil 12345 1000 10(每 1 秒输出 1 次,共 10 次,12345 为 PID)

options

-class :类加载相关(-class),监控类加载、卸载数量及耗时
-compiler:编译相关,查看 JIT 编译统计:编译成功/失败方法
-gc:堆内存各区域 GC 统计
-gccapacity :堆内存各区域容量变化
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil :堆内存使用率统计
-printcompilation:查看当前被 JIT 编译的手段信息:

jmap

生成堆内存快照(dump 文件)、查看内存分布

jstack -l 12345 > thread.dump(生成线程快照并保存到文件)

定位死锁、线程阻塞、热点技巧

jinfo

查看 / 修改 JVM 运行时参数

jinfo -flags 12345(查看 JVM 启动参数)jinfo -sysprops 12345(查看系统属性)

确认 JVM 参数是否正确部署

MAT(Memory Analyzer Tool)

堆快照分析(内存泄漏、大对象、对象引用链)

自动检测内存泄漏点、生成分析报告

APM工具

(Application Performance Monitoring,应用性能监控)有全链路APM、前端APM、后端APM、基础设施APM 等。

全链路 APM

是目前最主流的类型,支持跨服务、跨层级的性能追踪(从用户请求发起→前端→API 网关→微服务→数据库→缓存→基础设施),核心是通过 “分布式追踪” 技能串联整个请求链路。

SkyWalking:1. 支撑 Java、Go、Python 等多语言;2. 轻量级(Agent 低侵入);3. 内置链路追踪、指标分析、日志联动;4. 承受 K8s、云原生环境;适用场景:微服务架构、云原生应用、多语言混合任务

后端 APM 程序(聚焦服务 / 数据库性能)

Prometheus + Grafana:1. 开源组合,Prometheus 负责指标采集(时序数据),Grafana 负责可视化;2. 协助自定义指标、告警规则;3. 云原生生态核心工具;适用场景:基础设施监控、后端服务指标监控(如接口 QPS、延迟)

基础

匿名内部类

匿名内部类是定义在外部类的方法体、代码块或表达式中的局部内部类,没有显式的类名,其声明和实例化必须在外部类的内部完成。

通过匿名内部类能够直接访问外部类的所有成员(包括私有成员private

访问外部类的局部变量时,变量必须是final或 “事实上的 final”(Java 8+)

非静态匿名内部类(大多数情况)依赖于外部类的实例,持有外部类实例的引用。如果外部类实例被销毁,匿名内部类实例也会失去有效的外部引用。

静态匿名内部类(极少使用,需定义在静态上下文中):不依赖外部类实例,只能访问外部类的静态成员

匿名内部类必须继承一个类或实现一个接口

// 匿名内部类继承父类
public class OuterClass {public void test() {Object obj = new Object() { // 继承Object类@Overridepublic String toString() {return "匿名内部类的toString()";}};System.out.println(obj.toString()); // 输出:匿名内部类的toString()}
}

JIT 的工作原理

JVM 启动时,首先借助解释器执行字节码(启动速度快)。同时,JVM 内置的热点探测器(HotSpot Detector)会监控代码执行情况,识别出两类 “热点代码”:

  1. 被多次调用的技巧(方法调用次数达到阈值)。
  2. 被多次执行的循环体(循环执行次数达到阈值)。

当代码被判定为热点后,JIT 编译器会将其编译为本地机器码,并优化(如消除冗余计算、循环展开等),之后该代码的执行会直接利用编译后的机器码。

HotSpot 是最常用的 JVM 实现(如 Oracle JDK、OpenJDK),它内置了两种 JIT 编译器,C1(Client Compiler)和C2(Server Compiler),在 64 位 JDK 中,默认启用分层编译(Tiered Compilation):

  • 先利用 C1 迅速编译热点代码,保证程序尽快进入高效运行状态。
  • 对执行频率极高的代码,再由 C2 进行深度优化,进一步提升性能。

优点

  • 提升执行效率:热点代码编译为机器码后,执行速度可比解释执行快 10-100 倍。
  • 动态优化:能根据运行时资料(如实际输入、分支执行频率)进行针对性优化,这是静态编译(如 C/C++)难以实现的。
  • 平衡启动速度与运行性能:解释器保证快速启动,JIT 渐进式优化建立长期高效运行。

缺点

  • 编译开销:JIT 编译过程会消耗 CPU 和内存资源,可能导致程序运行初期出现短暂卡顿(尤其是 C2 深度优化时)。
  • 内存占用增加:编译后的机器码需要缓存,会占用额外内存。

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

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

相关文章

wqs 二分(凸完全单调性)

大学习 https://www.cnblogs.com/FloatingLife/p/19093641。 前置:斜率优化。我写的凸完全单调性(wqs 二分),有两个要素:凸,完全单调。 (施工中)以下是博客签名,正文无关 本文来自博客园,作者:Wy_x,转载请…

2025滑触线优质厂家推荐宸澳电气,安全防爆性能卓越!

2025滑触线优质厂家推荐宸澳电气,安全防爆性能卓越!当前C型/dhg型/c型单极组合/h型单极组合/行车瓷瓶绝缘子/分栋机/打包机/小型/M型/弧型/弧形/无轨电车/安全式/三相四线/1000a/立体仓库/防尘/地沟/四极安全/防爆/1…

CF *3000 数据结构题

CF *3000 数据结构题 A CF464E The Classic Problem \(\text{Link}\)题如其名,经典套路。这种非传统最短路题我们可以考虑模拟 Dijkstra,实际上本题就是使用 Dijkstra,问题在于如何存储以及比较两个边权的大小。观察…

2025年钢材厂家推荐排行榜,方钢/扁钢/圆钢/光轴/六角钢/异型钢/冷拉冷拔钢材/热轧钢材,Q355B/Q345B/16Mn/45#/40Cr/A3/Q235B钢公司精选

2025年钢材厂家推荐排行榜:方钢/扁钢/圆钢/光轴/六角钢/异型钢/冷拉冷拔钢材/热轧钢材,Q355B/Q345B/16Mn/45#/40Cr/A3/Q235B钢公司精选随着工业技术的不断发展和市场需求的多样化,钢材作为基础材料在各个行业中发挥…

[Linux] Linux下的域名解析过程(本机hosts和DNS服务器)

[Linux] Linux下的域名解析过程(本机hosts和DNS服务器)$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 介绍01 问路策略02 查询hosts03 查询DNS服务…

2025定型机厂家推荐:鑫源恒进节能高效,智能排风引领行业新趋势!

2025定型机厂家推荐:鑫源恒进节能高效,智能排风引领行业新趋势!随着纺织印染行业的快速发展,定型机作为关键设备之一,在提升产品质量和生产效率方面发挥着重要作用。当前,定型机、拉幅定型机/拉幅、门富士定型机…

Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)

Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)为了能够在Emacs记笔记的时候能够同步和备份笔记,我用如下Emacs自定义插件实现这个功能。备份功能将笔记备份到本地指定目录的压缩包,同步功能将笔记和远程…

LLM分词器

BERT基座模型

ubuntu 24.04虚拟机安装vgpu显卡驱动

# 安装依赖 sudo apt install build-essential linux-headers-generic libglvnd-dev pkg-config -y # 安装dkms sudo apt install dkms -y # 开启32位兼容库 sudo dpkg --add-architecture i386 sudo apt update # 安装…

CF1859F Teleportation in Byteland

树链剖分维护贡献发现最优策略一定是在一个位置训练,之后就直接到目标点,那么我们可以枚举训练次数,之后就可以转了。那么也就是说我们希望找到一个 \(u,v\) 路径上的点 \(s\),那么我们之后一定是从 \(s\) 出发,找…

密钥自己生成的方法

两人一组,在Ubuntu或openEuler中(推荐openEuler)中使用OpenSSL编程实现带签名的数字信封协议。使用OpenSSL库时,Alice发送,Bob接收。Ailice,Bob在实验中要替换为自己的8位学号+姓名。使用Markdown记录详细记录实…

2025机床维修厂家推荐:永华鑫数控设备,专业服务保障生产!

2025机床维修厂家推荐:永华鑫数控设备,专业服务保障生产!随着工业4.0的推进和智能制造的快速发展,机床作为制造业的核心设备,其稳定性和可靠性直接影响着企业的生产效率和产品质量。然而,由于长期高负荷运转及环…

逆向分析CoreText中的字体级联/Font Fallback机制

逆向分析CoreText中的字体级联/Font Fallback机制完整内容也可以在公众号「非专业程序员Ping」查看 一、引言本文基于Xcode 16.4,iOS 18.5模拟器分析,不同系统版本可能有区别。前面我们介绍了自定义文字排版引擎的原…

2025棋牌室加盟推荐麻友社,自主自助模式引领行业新风尚!

2025棋牌室加盟推荐麻友社,自主自助模式引领行业新风尚!当前棋牌室加盟领域的技术挑战随着科技的不断进步和消费者需求的多样化,棋牌室加盟领域面临着诸多技术挑战。传统的棋牌室经营模式已经难以满足现代消费者的需…

计算机硬件-网络

网卡 网卡如下 :想起网卡就想起了零拷贝 , 软件开发中常常遇到 ,例如 MQ 中 ,例如 Nginx 中 . 首先,什么是“零拷贝”? “零拷贝”的目标,顾名思义,就是尽量减少甚至完全避免数据在内存中的不必要的复制次数。 在传…

2025TYPE-C母座优质厂家推荐,创粤科技TID认证高速传输首选!

2025 TYPE-C母座优质厂家推荐,创粤科技TID认证高速传输首选!当前TYPE-C母座技术挑战随着电子设备的不断发展,TYPE-C母座作为连接器的重要组成部分,其需求量和性能要求也在不断提高。当前,TYPE-C母座面临诸多技术挑…

2025年医药冷链运输厂家推荐排行榜,药品/临床样本/CAR-T/蛋白/诊断试剂/生物/血液/细胞/芯片运输,冷藏车/冷藏箱/保温箱/干冰/液氮/温控/国际冷链公司推荐!

2025年医药冷链运输厂家推荐排行榜:药品/临床样本/CAR-T/蛋白/诊断试剂/生物/血液/细胞/芯片运输,冷藏车/冷藏箱/保温箱/干冰/液氮/温控/国际冷链公司推荐随着全球生物医药行业的快速发展,医药冷链运输的需求日益增…

Ubuntu 桌面美化

1.主题安装 1.1.更新 sudo apt update1.2.安装tweak sudo apt install gnome-tweaks1.3.安装firefox插件1.4.安装gnome-shell sudo apt install chrome-gnome-shell -y1.5.安装扩展管理器 sudo apt install gnome-shel…

题解:CF1336E2 Chiori and Doll Picking (hard version)

很牛很牛很牛的题。 题意:给出 \(n\) 个数 \(a_i\),保证 \(a_i<2^m\),问对于 \(i\in[0,m]\),从这 \(n\) 个数取出若干个异或值的 \(1\) 的个数为 \(i\) 的方案数。\(n\le 2\times 10^5,m\le 53\)。 做法: 首先…