JVM 学习前置知识
Java 开发环境层次结构解析
下图展示了 Java 开发环境的层级关系及其核心组件,从底层操作系统到上层开发工具,逐步构建完整的开发与运行环境:
1. 操作系统(Windows, MacOS, Linux, Solaris)
- 作用:为所有上层组件提供基础运行平台。
- 特点:Java 通过 JVM 实现跨平台能力,开发者无需针对不同操作系统单独编写代码。
2. JVM(Java Virtual Machine)
- 定位:位于操作系统之上,是 Java 跨平台能力的核心。
- 功能:
- 解释执行字节码(
.class
文件)。 - 管理内存分配与垃圾回收。
- 提供运行时环境(如线程管理、异常处理)。
- 解释执行字节码(
3. JRE(Java Runtime Environment)
- 组成:JVM + 基础类库(如
java.lang
,java.util
)。 - 作用:为 Java 程序提供运行时环境,支持程序的执行。
- 适用场景:普通用户只需安装 JRE 即可运行已编译的 Java 程序。
4. JDK(Java Development Kit)
- 组成:JRE + 开发工具(如
javac
编译器、jar
打包工具、调试器)。 - 作用:开发者使用 JDK 编写、编译和调试 Java 代码。
- 核心工具:
javac
:将.java
文件编译为.class
字节码。java
:启动 JVM 并运行程序。jdb
:调试工具。
5. 开发 JavaSE 程序
- 所需组件:JDK + IDE 工具(如 IntelliJ IDEA、Eclipse)。
- 用途:开发标准 Java 应用程序,如桌面应用、命令行工具等。
- 示例:使用
Swing
开发 GUI 应用,或编写简单的算法程序。
6. 开发 JavaEE 程序
- 所需组件:JDK + 应用服务器(如 Tomcat、WildFly) + IDE 工具。
- 用途:开发企业级分布式应用,支持 Web 服务、数据库交互等复杂场景。
- 核心技术:
- Servlet/JSP:处理 HTTP 请求与响应。
- EJB:实现业务逻辑组件。
- JPA:数据库持久化操作。
- 应用服务器角色:提供容器管理、事务控制、安全性等企业级功能。
依赖关系总结
操作系统
└── JVM
└── JRE(JVM + 基础类库)
└── JDK(JRE + 编译工具)
├── JavaSE 开发(JDK + IDE)
└── JavaEE 开发(JDK + 应用服务器 + IDE)
引言
Java 虚拟机(JVM)是 Java 生态系统的核心组件,它使得 Java 能够实现“一次编写,到处运行”的特性。理解 JVM 的底层原理,不仅能帮助我们编写高性能的代码,还能有效解决实际开发中的疑难问题(如内存泄漏、性能瓶颈等)。
什么是 JVM?
定义:
Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境)
JVM 核心组件
- 类加载器(ClassLoader):加载
.class
文件到内存。 - 运行时数据区:包括方法区、堆、虚拟机栈、本地方法栈、程序计数器。
- 执行引擎:解释或编译执行字节码。
- 垃圾回收器(GC):自动回收不再使用的对象。
JVM的好处
- 一次编写,到处运行
- 自动内存管理,垃圾回收功能
- 数组下标越界检查
- 多态
学习 JVM 有什么用?
- 性能调优
- 通过调整堆内存大小(
-Xms
,-Xmx
)或选择垃圾回收器(如 G1、ZGC)优化应用性能。
- 通过调整堆内存大小(
- 排查问题
- 分析内存溢出(OOM)、死锁等问题(工具:
jstack
,jmap
,VisualVM
)。
- 分析内存溢出(OOM)、死锁等问题(工具:
- 深入理解 Java 特性
- 理解多线程(线程栈模型)、异常处理(异常表)等底层机制。
- 面试高频考点
- JVM 内存模型、垃圾回收算法、类加载机制等是 Java 后端面试的常见问题。
常见的 JVM 实现
名称 | 特点 |
---|---|
HotSpot | Oracle 官方默认 JVM,应用最广泛,支持多种垃圾回收器和优化策略。 |
OpenJ9 | IBM 开发,低内存占用和高启动速度,适合云原生和微服务场景。 |
GraalVM | 支持多语言(Java、Python、JS),提供原生镜像编译(Native Image)。 |
Zing | 专为低延迟场景设计,无停顿垃圾回收(C4 算法)。 |
学习路线
1. 基础概念
- 书籍:《深入理解 Java 虚拟机》(周志明)
- 重点:JVM 内存结构、垃圾回收算法、类加载过程。
2. 工具实践
- 监控工具:
jconsole
,VisualVM
,Arthas
。 - 内存分析:使用
MAT(Memory Analyzer Tool)
分析堆转储文件。
3. 调优实战
- 参数调优:堆大小、新生代/老年代比例(
-XX:NewRatio
)、选择 GC 算法。 - 案例:解决 Full GC 频繁、Young GC 时间过长等问题。
4. 进阶学习
- 源码研究:HotSpot 源码(如垃圾回收器实现)。
- 新技术:学习 ZGC、Shenandoah 等低延迟 GC 的原理。