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.必读书籍

  1. 《深入理解 Java 虚拟机》第 3 版(周志明)—— 首选圣经
  2. 《Java 虚拟机规范(Java SE 8 版)》—— 官方权威
  3. 《实战 Java 虚拟机》—— 侧重实战调优
  4. 《垃圾回收算法实现》—— 深入 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 双次编译机制

  1. 前端编译(一次编译)

    开发者写 .java 源码 → 通过 javac 编译 → 生成跨平台统一的 .class 字节码文件

    字节码不是机器码,是 JVM 能看懂的中间指令,和系统无关。

  2. 后端执行(到处运行)

    不同系统(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 有区别

四、极简背诵版

  1. JDK 包含 JRE,JRE 包含 JVM;开发用 JDK,部署用 JRE。
  2. Java 跨平台:java 编译为统一 class 字节码,不同系统安装对应 JVM,由 JVM 翻译执行。
  3. HotSpot 是 Java 主流默认虚拟机;OpenJ9 低内存,Zing 低延迟大堆,GraalVM 新一代多语言虚拟机。

JVM基础概念
http://hanqichuan.com/2026/04/17/jvm/JVM基础概念/
作者
韩启川
发布于
2026年4月17日
许可协议