发布时间:2026/6/20 15:17:07
JVM虚拟机调优实战
参考2025年讲的最好的JVM虚拟机实战教程JVM内存模型JVM调优JVM底层原理JVM面试题比啃书效果好多了一周学完让你少走99%的弯路_哔哩哔哩_bilibili一、JDK的体系结构1.为什么Java可以跨平台1. 编译阶段一次编译生成统一字节码.java源文件通过javac编译命令编译生成 .class字节码文件字节码是一套不绑定 Windows/Linux/macOS 任何操作系统、独立于硬件平台的中间指令只面向 JVM 规范和底层系统无关。2. 运行阶段不同系统安装对应版本 JVM使用java命令运行.class时Windows 系统安装Windows 版 JVMLinux 系统安装Linux 版 JVMJVM 是平台相关的不同操作系统有各自适配系统内核的 JVM 实现由厂商针对系统单独开发。3. JVM 屏蔽底层系统差异核心JVM 本质是一个虚拟计算机在软件层隔离操作系统、CPU 硬件的底层指令差异同一份.class字节码交给对应系统的 JVM 后JVM 会把统一字节码翻译成当前本机操作系统能识别的机器码执行。总结一句话一次编译到处运行源文件统一编译成与平台无关的 class 字节码依靠各操作系统专属的 JVM 做适配翻译实现跨平台。关键点Java 程序 (.class) 跨平台JVM 本身不跨平台。二、JVM虚拟机内存模型1. 程序计数器【线程私有】作用记录当前线程正在执行的字节码行号用于线程切换后恢复执行位置、指引字节码引擎顺序执行指令唯一没有 OOM内存溢出的内存区域执行 native 本地方法时计数器值为空。2. 栈线程【线程私有】①、基础特性线程私有一个线程对应一个独立虚拟机栈线程创建栈同步开辟线程销毁栈立刻自动回收内存不存在 GC 回收栈内存。生命周期和线程完全绑定多线程之间虚拟机栈互相隔离、互不干扰。②、内部结构栈帧核心虚拟机栈由多个栈帧Frame组成每调用 1 个方法就往栈顶压入 1 个栈帧方法执行完毕栈帧出栈销毁遵循后进先出栈结构。单个栈帧包含 4 部分局部变量表存放方法内的局部变量基本数据类型、对象引用地址编译期就确定内存大小。操作数栈临时存放运算数据做加减、赋值等运算时数据入栈计算、结果出栈。动态链接指向方法区常量池将符号引用转为实际方法地址。方法返回地址记录方法结束后回到上层调用方法的执行位置。③、两种异常情况StackOverflowError栈溢出单个线程不断递归调用方法栈帧数量超出虚拟机栈固定容量栈装满报错。OutOfMemoryErrorOOM虚拟机栈支持动态扩容操作系统无法继续分配新内存给栈时报内存溢出。3. 本地方法栈【线程私有】和虚拟机栈结构功能近似专门服务于 Native 本地方法C/C 编写的底层方法负责调用操作系统底层原生方法同样会抛出栈溢出与 OOM 异常。4. 堆Heap【线程共享GC 重点区域】JVM 中最大的一块内存所有线程共享唯一目的存放所有 Java 对象实例、数组对象绝大多数对象在这里创建是垃圾回收GC最主要区域分新生代、老年代堆内存耗尽无法分配对象 →OutOfMemoryError堆内存溢出。5. 方法区JDK8 后→元空间 Metaspace【线程共享】JDK1.8 重大改动方法区从堆中剥离落地到操作系统本地内存改名元空间存储内容已加载类的类信息、常量、静态变量、运行时常量池、编译后的即时代码元空间使用本地内存默认无固定上限内存耗尽同样触发 OOM补充两个外部协作组件流程图右侧类加载子系统负责加载.class字节码解析后将类元数据存入方法区、类对象放入堆字节码执行引擎读取各内存区数据解释 / 编译字节码驱动程序运行。三、堆内存细分老年代与新生代分代设计初衷不同对象存活生命周期差异极大分代搭配不同 GC 回收算法大幅提升 GC 效率、降低 STW 停顿时间。新生代Young存放新创建、短生命周期临时对象占据堆约 1/3 空间内部划分为 Eden 伊甸区、Survivor0、Survivor1 两个幸存区使用复制清除算法回收。老年代Old存放长期存活、大体积对象、多次 GC 后存活晋升的对象占据堆约 2/3 空间使用标记整理 / 标记清除算法回收。对象晋升规则新生代对象经历指定次数 Minor GC 后依旧存活自动晋升到老年代超大对象直接绕过新生代分配到老年代。四、STW 全局暂停机制定义Stop-The-WorldGC 执行期间暂停全部用户业务线程只允许 GC 后台线程运行所有主流垃圾回收器都存在 STW仅停顿时长有差异。产生原因GC 标记、整理、复制对象时如果业务线程同步创建 / 修改对象会造成引用关系错乱、内存碎片紊乱必须冻结所有业务线程保证 GC 准确性。影响与优化方向STW 停顿直接影响接口响应、高并发系统吞吐量调优核心目标就是缩小 STW 时长例如使用 ZGC、Shenandoah 低延迟回收器。五、JVM 调优工具 Arthas 详解定位阿里开源 Java 线上诊断神器无需重启服务、无需修改业务代码实时监控 JVM 运行状态。核心常用能力监控方法调用耗时、调用次数、异常率查看类加载信息、JVM 内存实时占用、GC 次数与耗时反编译线上 Class、动态修改日志级别、排查死锁线程线上实时定位 OOM、CPU 飙高、线程阻塞等疑难故障。六、实战双十一亿级电商网站 JVM 参数调优业务痛点大促峰值百万 QPS接口超时、频繁 Full GC、长时间 STW、偶发 OOM。调优完整流程1压测采集基线数据GC 频率、STW 耗时、堆内存占用、CPU 负载2选型低延迟垃圾回收器ZGC/G13精细划分新生代 / 老年代内存比例、调整对象晋升阈值4优化大对象分配、关闭冗余 JIT 编译参数5上线灰度放量持续监控 GC 日志、接口 RT、吞吐量迭代微调参数。七、JVM 高频 10 道面试题详解01 OOM 一定会导致 JVM 退出吗不一定。只有主线程抛出未捕获 OOM、或核心守护线程崩溃时 JVM 才会退出普通子线程抛出 OOM 仅当前线程终止剩余线程可正常运行JVM 进程存活。02 对象一定分配在堆中吗不是。JIT 逃逸分析开启后方法内未逃逸的局部小对象会栈上分配直接存放在虚拟机栈栈帧方法结束随栈帧销毁不经过 GC超大对象、全局逃逸对象依旧分配堆。03 内存泄漏和内存溢出的区别内存泄漏程序持有无效对象引用GC 无法回收这块内存内存占用缓慢持续上涨属于过程问题长期泄漏最终一定会诱发 OOM 溢出。内存溢出 OOM内存空间已经耗尽无法分配新内存程序抛出异常崩溃属于最终结果。04 JVM 对象分配内存如何保证线程安全两种方案内存分配同步锁CAS 自旋锁保证堆内存分配原子性TLAB 线程本地分配缓冲区每个线程预分配一小块私有堆内存优先在 TLAB 创建对象无竞争TLAB 耗尽再走全局堆同步分配。05 堆一定是线程共享的吗整体堆空间属于线程共享但 TLAB线程本地分配缓冲区是堆划分给单线程独占的小块内存线程之间 TLAB 隔离仅共享堆主空间。06 Class 常量池和运行时常量池的区别Class 常量池存在于.class文件中编译期生成存储字面量、符号引用运行时常量池类加载后Class 常量池内容载入方法区的运行时常量池支持运行期动态添加常量String.intern()。07 运行时常量池和字符串常量池的区别运行时常量池隶属于方法区存储所有类型常量、符号引用字符串常量池JDK8 存放在堆中专门缓存 String 字符串对象intern()方法控制字符串入池复用减少重复字符串内存占用。08 什么情况会导致 JVM 退出正常退出所有非守护业务线程全部执行完毕调用System.exit(0)主动正常退出异常退出主线程未捕获致命异常 / OOMJVM 内部崩溃、操作系统强制 kill 进程硬件资源耗尽。09 JVM 内存为什么要分代对象存活周期两极分化大部分对象朝生夕灭少量对象长期存活分代适配不同 GC 算法新生代用高效复制算法老年代用标记整理平衡回收速度、内存碎片、CPU 开销大幅减少 Full GC 频率Full GC 停顿远大于 Minor GC分代能极大降低全局 STW 耗时。10 GC 是任意时候都能进行的吗不可以。GC 触发有严格时机限制新生代 Eden 区填满触发 Minor GC老年代空间不足、空间担保失败触发 Full GC代码同步块、native 方法执行、JIT 编译关键阶段、栈帧完整执行过程中不会中断执行强制 GCGC 执行全程触发 STW必须等业务线程到达安全点SafePoint才可以启动回收。八、Java 完整学习路线图配套拓展基础阶段Java 语法、面向对象、集合、IO、多线程、反射、异常进阶核心JVM 完整体系本文内容、并发包、NIO、Lambda、JUC 锁框架工程Spring/SpringBoot、MyBatis、SpringCloud 微服务中间件Redis、MQ、Elasticsearch、MySQL 调优高阶实战分布式事务、分库分表、亿级流量调优、容器 K8s、架构设计。结尾总结JVM 是 Java 后端面试核心重难点吃透运行时内存分区、GC 分代、STW、调优工具与实战场景能应对 80% 企业 JVM 面试提问日常开发中掌握 Arthas 诊断、GC 日志分析、参数调优可独立负责线上高并发服务稳定性保障。

相关新闻

工商业储能系列: 主动均衡之集中式主动均衡<双向隔离DCDC+开关矩阵>
2026/6/20 15:10:47

工商业储能系列: 主动均衡之集中式主动均衡<双向隔离DCDC+开关矩阵>

前言 在锂电池储能系统中,电芯之间存在难以避免的容量和内阻差异,形成“木桶效应”——最差的那节电芯限制了整个模组的可用容量,并加速整体衰减。主动均衡技术正是为了解决这一问题而生。 集中式主动均衡属于主动均衡的一种主流技术路线&a…

阅读更多
AI真的在写AI了?Anthropic发布递归自我提升报告,附完整数据解读
2026/6/13 4:54:48

AI真的在写AI了?Anthropic发布递归自我提升报告,附完整数据解读

大家好,我是大飞。 昨天晚上,Anthropic(Claude Code背后的公司)在X上发了一条动态: 我们的内部数据显示,Claude 正在加速人工智能的发展—这可能是通往递归自我改进的路径,或者说人工智能自主构…

阅读更多
听见光的声音:鼎讯CM-K60 为煤矿光缆维护装上 “透视眼”
2026/6/13 22:33:21

听见光的声音:鼎讯CM-K60 为煤矿光缆维护装上 “透视眼”

在现代煤矿的智能化建设中,光纤网络如同矿井的 “神经中枢”,承载着监控、通信、自动化控制等关键数据的传输。然而,当身处错综复杂的井下巷道或地面变电站,面对成捆铺设的光缆,如何在不中断业务、不损伤线路的前提下&…

阅读更多
华硕笔记本终极控制指南:如何用G-Helper彻底摆脱Armoury Crate的臃肿束缚
2026/6/20 14:59:12

华硕笔记本终极控制指南:如何用G-Helper彻底摆脱Armoury Crate的臃肿束缚

华硕笔记本终极控制指南:如何用G-Helper彻底摆脱Armoury Crate的臃肿束缚 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Viv…

阅读更多
3分钟快速上手:GitHub汉化插件让你的英文界面秒变中文
2026/6/20 14:59:12

3分钟快速上手:GitHub汉化插件让你的英文界面秒变中文

3分钟快速上手:GitHub汉化插件让你的英文界面秒变中文 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾在GitHub的…

阅读更多
HSTracker:3分钟上手的macOS炉石助手实战指南
2026/6/20 14:59:12

HSTracker:3分钟上手的macOS炉石助手实战指南

HSTracker:3分钟上手的macOS炉石助手实战指南 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 如果你是macOS平台的炉石传说玩家,一定遇到过这样的…

阅读更多
5分钟上手:无需训练的AI换脸工具roop-unleashed终极指南
2026/6/20 14:59:12

5分钟上手:无需训练的AI换脸工具roop-unleashed终极指南

5分钟上手:无需训练的AI换脸工具roop-unleashed终极指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 你是否曾想过,只需一张照片…

阅读更多
网盘直链解析工具:八大平台免费高速下载解决方案
2026/6/20 14:59:12

网盘直链解析工具:八大平台免费高速下载解决方案

网盘直链解析工具:八大平台免费高速下载解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …

阅读更多
C++迭代器与范围编程
2026/6/20 13:59:12

C++迭代器与范围编程

C迭代器与范围编程迭代器是STL中连接容器和算法的桥梁。C20引入的范围库提供了更简洁的遍历方式,结合视图可以高效处理数据序列。迭代器类别决定其能力:输入、输出、前向、双向和随机访问。#include #include #include #include #include #includevoid i…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/17 23:21:18

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/18 4:35:02

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/18 15:04:04

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
洛雪音乐终极音源指南:一站式获取全网无损音乐的完整解决方案
2026/6/20 0:59:03

洛雪音乐终极音源指南:一站式获取全网无损音乐的完整解决方案

洛雪音乐终极音源指南:一站式获取全网无损音乐的完整解决方案 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 你是否厌倦了在不同音乐平台之间来回切换,只为找到一首歌的无…

阅读更多
Display Driver Uninstaller深度清理方案:显卡驱动残留问题的终极解决方案(2024版)
2026/6/20 0:59:03

Display Driver Uninstaller深度清理方案:显卡驱动残留问题的终极解决方案(2024版)

Display Driver Uninstaller深度清理方案:显卡驱动残留问题的终极解决方案(2024版) 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitco…

阅读更多
深入解析MC68HC908AS32A的SCI模块:从异步通信原理到寄存器实战配置
2026/6/20 0:59:03

深入解析MC68HC908AS32A的SCI模块:从异步通信原理到寄存器实战配置

1. 项目概述:深入MC68HC908AS32A的异步串行通信核心在嵌入式系统开发中,尤其是面对工业控制、车载电子或智能仪表这类需要设备间稳定对话的场景,串行通信接口(SCI)往往是工程师最可靠的老朋友。它不像并行总线那样需要…

阅读更多
GIT修改用户名
2026/6/20 3:11:17

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/19 20:40:12

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/20 7:34:01

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多