JVM 虚拟机
2025/12/12大约 1 分钟
JVM 虚拟机
JVM(Java Virtual Machine)是 Java 程序的运行环境,负责将 Java 字节码翻译成机器码执行。深入理解 JVM 对于编写高性能 Java 程序和解决生产问题至关重要。
目录
核心内容
1. JVM 内存结构
- 程序计数器
- 虚拟机栈
- 本地方法栈
- 堆
- 方法区
2. 类加载机制
- 类加载过程:加载、验证、准备、解析、初始化
- 类加载器:Bootstrap、Extension、Application
- 双亲委派模型
3. 垃圾回收
- 垃圾判定算法:引用计数、可达性分析
- 垃圾回收算法:标记清除、复制、标记整理
- 垃圾收集器:Serial、Parallel、CMS、G1、ZGC
4. JVM 调优
- JVM 参数配置
- 性能监控与诊断
- 常见问题排查
JVM 架构图
┌─────────────────────────────────────────────────────────────┐
│ Class Files │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Class Loader │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Bootstrap │→ │ Extension │→ │ Application │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Runtime Data Area │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ │
│ │ Method │ │ Heap │ │ VM Stack │ │ PC Reg │ │
│ │ Area │ │ │ │ │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Execution Engine │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Interpreter │ │ JIT Compiler│ │ Garbage Collector │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Native Method Interface │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ Native Method Library │
└─────────────────────────────────────────────────────────────┘说明
本系列文章基于 JDK 8 / JDK 11 编写,涵盖了 JVM 的核心知识点。理解 JVM 原理有助于:
- 编写更高效的 Java 代码
- 合理配置 JVM 参数
- 快速定位和解决生产问题
- 深入理解 Java 语言特性
参考资料
- 深入理解 Java 虚拟机(第 3 版)- 周志明
- Java 虚拟机规范
- https://docs.oracle.com/javase/specs/jvms/se8/html/
