JVM基础概念
JVM学习路线
1. JVM 基础概念
- JVM、JRE、JDK 的区别与联系
- JVM 跨平台原理(一次编译、到处运行)
- HotSpot VM 主流地位与其他 VM(OpenJ9、Zing)简介
2. 运行时数据区
- 线程私有区域:
- 程序计数器、虚拟机栈、本地方法栈
- 栈帧结构(局部变量表、操作数栈、动态链接、方法出口)
- StackOverflowError 触发场景
- 线程共享区域:
- Java 堆、元空间(Metaspace,替代方法区)、直接内存
- 堆内存分代:新生代(Eden/S0/S1)、老年代
- OOM 常见类型(堆 OOM、栈 OOM、元空间 OOM)
3. 类文件结构(Class 文件)
- 魔术因子(0xCAFEBABE)、版本号
- 常量池(字面量、符号引用)、访问标志
- 字段表、方法表、属性表(Code 属性)
- 工具:
javap -v反解析 Class 文件
4. 类加载机制
- 类加载完整流程:加载 → 验证 → 准备 → 解析 → 初始化
- 类加载器分类:启动类加载器、扩展类加载器、应用类加载器
- 双亲委派模型:原理、作用、破坏场景(Tomcat、OSGi、SPI)
- 自定义类加载器实现(重写
findClass)
5. 垃圾回收(GC)核心
- 垃圾判断算法:引用计数法、可达性分析算法(GC Roots)
- 引用类型:强引用、软引用、弱引用、虚引用(用途与场景)
- 垃圾回收算法:标记 - 清除、复制、标记 - 整理、分代收集
- 主流垃圾收集器
- 新生代:Serial、ParNew、Parallel Scavenge
- 老年代:Serial Old、Parallel Old、CMS
- 全堆:G1(JDK8 + 主流)、ZGC、Shenandoah(低延迟)
- 内存分配与回收策略:对象优先 Eden 分配、大对象直接进老年代、长期存活对象晋升
6. 执行引擎
- 字节码执行流程(解释执行、编译执行)
- JIT 即时编译:C1/C2 编译器、分层编译、热点代码探测
- 逃逸分析、栈上分配、标量替换(JVM 优化技术)
7. Java 内存模型(JMM)与并发
- JMM 三大特性:原子性、可见性、有序性
- volatile 原理(内存屏障、禁止指令重排)
- happens-before 原则
- synchronized 锁升级(偏向锁 → 轻量级锁 → 重量级锁)
8. JVM 监控与分析工具
- JDK 自带工具:jps、jstat、jmap、jhat、jstack、jinfo、jcmd
- 可视化工具:VisualVM、JConsole、Java Mission Control(JMC)
- 专业工具:MAT(内存分析)、GCViewer、Arthas(阿里开源)
9. 常见问题排查
- OOM 排查:堆 Dump 分析、定位泄漏代码
- 内存泄漏:8 大典型场景(静态集合、单例、连接未关闭等)
- 死锁排查:jstack 分析线程栈、定位死锁代码
- CPU 过高:线程 CPU 占比分析、定位耗 CPU 代码
10. JVM 参数与调优
- 核心参数:
- 堆:
-Xms-Xmx-Xmn-XX:NewRatio-XX:SurvivorRatio - GC:
-XX:+UseG1GC-XX:MaxGCPauseMillis-XX:+UseZGC - 元空间:
-XX:MetaspaceSize-XX:MaxMetaspaceSize
- 堆:
- 调优目标:降低 GC 频率、缩短 STW 时间、避免 FullGC、减少 OOM
- 调优步骤:监控 → 分析 → 参数调整 → 压测验证
11. 实战案例
- Web 服务 GC 频繁调优
- 大数据任务内存泄漏排查
- 微服务容器化 JVM 优化(避免 OOMKilled)
12.必读书籍
- 《深入理解 Java 虚拟机》第 3 版(周志明)—— 首选圣经
- 《Java 虚拟机规范(Java SE 8 版)》—— 官方权威
- 《实战 Java 虚拟机》—— 侧重实战调优
- 《垃圾回收算法实现》—— 深入 GC 底层
JVM 基础概念
一、JDK / JRE / JVM 区别与联系
1. 三者定义
JVM(Java Virtual Machine,Java 虚拟机)
只负责运行Java 字节码的虚拟机器,是 Java 跨平台的核心,只跑程序,不包含编译工具。
JRE(Java Runtime Environment,Java 运行时环境)
包含:JVM + Java 核心类库
作用:电脑 / 服务器能运行 Java 项目的最小环境,只用来「跑代码」,不能写代码、编译代码。
JDK(Java Development Kit,Java 开发工具包)
包含:JRE + 开发编译工具
工具:
javac编译器、java运行命令、jps/jmap等排查工具、调试工具。作用:程序员开发 + 编译 + 运行 + 调试Java 代码全套环境。
2. 层级关系
JDK⊃JRE⊃JVM
- 开发代码:必须装 JDK
- 线上部署运行项目:只需要装 JRE
- 最底层核心:JVM
3. 一句话区分
- JDK:给开发者用,写代码、编译、运行全套
- JRE:给服务器 / 普通用户用,只运行 Java 程序
- JVM:底层引擎,专门解析执行字节码
二、JVM 跨平台原理(一次编译,到处运行)
1. C/C++
直接编译成操作系统原生机器码
- Windows 编译的程序,不能在 Linux / Mac 运行
- 绑定硬件 + 系统,不跨平台
2. Java 双次编译机制
前端编译(一次编译)
开发者写
.java源码 → 通过javac编译 → 生成跨平台统一的 .class 字节码文件字节码不是机器码,是 JVM 能看懂的中间指令,和系统无关。
后端执行(到处运行)
不同系统(Windows/Linux/Mac)安装对应版本的 JVM
各自系统的 JVM,负责把统一的 class 字节码,翻译成当前系统的本地机器码执行。
核心逻辑
统一字节码 + 各系统适配的 JVM = 跨平台
不是 Java 跨平台,是JVM 屏蔽了系统差异。
三、主流虚拟机 & HotSpot 地位
1. HotSpot VM(目前绝对主流)
甲骨文 / OpenJDK 默认自带虚拟机
优势:成熟稳定、优化极强、社区生态最全、面试 & 生产唯一主流
核心特性:
内置 C1/C2 即时编译器、分代 GC、锁优化、逃逸分析等大量底层优化
日常开发、线上项目、所有 JVM 调优知识点,全部基于 HotSpot。
2. OpenJ9 VM
- IBM 主导开发,现在贡献给开源
- 核心优势:内存占用极低、启动更快
- 适用场景:云原生、微服务集群、容器化部署(看重低内存)
- 缺点:性能极致优化不如 HotSpot,国内使用偏少。
3. Zing VM
- 主打低延迟、超大堆 GC
- 专为高并发、大内存、业务不能长时间停顿的场景设计
- 商业收费虚拟机,金融、大型企业少数场景使用,普通开发基本接触不到。
4. 其他小众 VM
- GraalVM:新一代高性能虚拟机,支持 AOT 编译、多语言混合执行,云原生热门
- Dalvik / ART:安卓早期 / 现代虚拟机,移动端专属,和标准 JVM 有区别
四、极简背诵版
- JDK 包含 JRE,JRE 包含 JVM;开发用 JDK,部署用 JRE。
- Java 跨平台:java 编译为统一 class 字节码,不同系统安装对应 JVM,由 JVM 翻译执行。
- HotSpot 是 Java 主流默认虚拟机;OpenJ9 低内存,Zing 低延迟大堆,GraalVM 新一代多语言虚拟机。
JVM基础概念
http://hanqichuan.com/2026/04/17/jvm/JVM基础概念/