1. JVM 是什么?
JVM(Java Virtual Machine,Java 虚拟机) 是一个虚拟的计算机程序,它是 Java 程序运行的核心环境。JVM 的主要职责是加载、验证、解释或编译 Java 字节码(.class 文件),并管理其执行过程。
• 关键特性:
• 跨平台性:通过“一次编译,到处运行”(Write Once, Run Anywhere)实现代码的平台无关性。
• 自动内存管理:提供垃圾回收(GC)机制,管理堆内存的分配与释放。
• 安全沙箱:通过字节码验证、类加载隔离等机制,限制恶意代码对系统的破坏。
2. JVM 解决了什么问题?
JVM 的设计目标是为了解决传统编程语言在跨平台性和内存管理上的痛点:
-
跨平台兼容性
• 传统问题:C/C++ 等语言编译生成机器码,需针对不同操作系统和硬件架构分别编译。
• JVM 方案:代码编译为字节码(中间代码),由各平台的 JVM 实现负责解释或编译执行。
-
内存安全与自动化管理
• 传统问题:C/C++ 需手动管理内存,易导致内存泄漏或越界访问。
• JVM 方案:通过垃圾回收器自动回收无用对象,开发者无需显式释放内存。 -
多线程与高并发支持
• 传统问题:原生线程管理复杂且容易出错。
• JVM 方案:内置线程调度、锁优化(如偏向锁、轻量级锁)等机制,简化并发编程。
3. JVM 在 JDK 中的体现
JDK(Java Development Kit) 是 Java 开发工具包,包含编译器(javac)、调试工具、类库等。JVM 是 JDK 的核心组件之一,具体体现为:
• JVM 与 JDK 的关系:
• JVM 的职责:
• 执行字节码:通过解释器或即时编译器(JIT)将字节码转换为机器码。
• 运行时管理:管理内存、线程、异常处理等。
4. 操作系统与 JVM 的关系
JVM是运行在操作系统之上的,它与硬件没有直接的交互,如图1-7所示。
5. 虚拟机与 JVM 的关系
虚拟机(Virtual Machine) 是一种模拟完整计算机系统的软件抽象层,广义的虚拟机包括两种类型:
- 系统虚拟机:
• 模拟完整的操作系统和硬件(如 VMware、VirtualBox),支持运行多个独立应用。 - 进程虚拟机:
• 针对单一进程提供运行环境(如 JVM、.NET CLR),专注于特定语言或任务的执行。
JVM 是进程虚拟机的一种,专为执行 Java 字节码设计,核心特点包括:
• 语言无关性:JVM 理论上可运行任何编译为字节码的语言(如 Kotlin、Scala)。
• 标准规范:遵循《Java 虚拟机规范》,不同厂商(Oracle、OpenJDK、Azul)可提供自己的实现。
6. JVM 的整体结构
- 最上层:类装载器子系统。javac编译器将编译好的字节码文件,通过Java类装载器执行机制,把对象或字节码文件存放在JVM内存划分区域。
- 中间层:运行时数据区(Runtime Data Area)。主要是在Java代码运行时用于存放数据的区域,包括方法区、堆、Java栈、程序计数器、本地方法栈。
- 最下层:执行引擎层。执行引擎包含解释器、JIT(Just In Time)编译器和垃圾回收器(Garbage Collection,GC)
总结
概念 | 核心要点 |
---|---|
JVM 是什么 | 执行 Java 字节码的进程虚拟机,实现跨平台性和自动内存管理。 |
解决的问题 | 跨平台兼容性、内存安全、多线程支持。 |
在 JDK 中的角色 | JDK 包含 JVM,JVM 负责运行字节码,JDK 还提供编译器和开发工具。 |
与虚拟机的关系 | JVM 是虚拟机的一种,专为 Java 设计,但可扩展支持其他语言。 |
JVM 的价值:通过抽象硬件和操作系统差异,降低开发复杂度,同时提供高性能、安全的执行环境。