1631 字
约 5 分钟
8
第3章 JDK、JRE和JVM详解
2026-09-24
无标签
第3章 JDK、JRE和JVM详解
面包屑导航
学习目标
- 理解JDK、JRE、JVM的概念和作用
- 掌握三者之间的关系和区别
- 了解Java程序的编译和运行过程
- 理解Java跨平台的实现原理
- 掌握字节码的概念和作用
核心组件概述
Java平台由三个核心组件构成,它们各自承担不同的职责,共同构成了完整的Java开发和运行环境:
JDK (Java Development Kit)
Java开发工具包
- 包含完整的开发工具
- 包含JRE运行环境
- 提供编译器(javac)
- 提供调试器(jdb)
- 提供文档生成工具(javadoc)
- 提供打包工具(jar)
JRE (Java Runtime Environment)
Java运行环境
- 包含JVM虚拟机
- 包含核心类库
- 包含支持文件
- 提供运行Java程序的环境
- 不包含开发工具
- 面向最终用户
JVM (Java Virtual Machine)
Java虚拟机
- 执行字节码的虚拟机
- 提供跨平台支持
- 管理内存分配
- 执行垃圾回收
- 提供安全机制
- 优化程序执行
组件关系图
JDK、JRE、JVM 包含关系JDK⊃JRE⊃JVM> 包含关系:JDK包含JRE,JRE包含JVM。这意味着安装JDK就拥有了完整的Java开发和运行环境。
详细解析
JDK (Java Development Kit)
JDK是Java开发工具包,是Java开发者必须安装的软件包。它包含了开发Java应用程序所需的所有工具和库。
JDK主要组件:
- javac:Java编译器,将.java源文件编译成.class字节码文件
- java:Java解释器,用于运行Java程序
- javadoc:文档生成器,从源代码注释生成HTML文档
- jar:打包工具,将多个class文件打包成jar文件
- jdb:Java调试器,用于调试Java程序
- javap:反编译器,显示class文件的内容
JRE (Java Runtime Environment)
JRE是Java运行环境,包含了运行Java程序所需的最小环境。如果只需要运行Java程序而不需要开发,安装JRE就足够了。
JRE主要组件:
- JVM:Java虚拟机,执行字节码
- 核心类库:Java标准库,如java.lang、java.util等
- 支持文件:配置文件、属性文件等
JVM (Java Virtual Machine)
JVM是Java虚拟机,是Java跨平台特性的核心。它是一个抽象的计算机,有自己的指令集和内存管理机制。
JVM主要功能:
- 字节码执行:解释或编译执行Java字节码
- 内存管理:自动分配和回收内存
- 垃圾回收:自动清理不再使用的对象
- 安全管理:提供安全沙箱环境
- 异常处理:处理程序运行时的异常
Java程序执行流程
从源代码到运行的完整流程1编写源代码创建.java文件→2编译javac生成.class→3加载JVM加载字节码→4执行JVM执行程序
# 1. 编写Java源代码 (HelloWorld.java)
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
# 2. 使用javac编译源代码
javac HelloWorld.java
# 3. 编译后生成HelloWorld.class字节码文件
# 4. 使用java命令运行程序
java HelloWorld
# 5. 输出结果
Hello, World!
三者对比分析
| 特性 | JDK | JRE | JVM |
|---|---|---|---|
| 全称 | Java Development Kit | Java Runtime Environment | Java Virtual Machine |
| 主要用途 | 开发Java应用程序 | 运行Java应用程序 | 执行Java字节码 |
| 目标用户 | Java开发者 | 最终用户 | 系统底层(用户不直接接触) |
| 包含内容 | 开发工具 + JRE | JVM + 核心类库 | 虚拟机引擎 |
| 是否包含编译器 | 是(javac) | 否 | 否 |
| 是否可以运行Java程序 | 是 | 是 | 是(需要类库支持) |
| 文件大小 | 最大 | 中等 | 最小 |
跨平台原理
Java的"一次编写,到处运行"(Write Once, Run Anywhere, WORA)特性是通过JVM实现的:
跨平台机制:Java源代码编译成平台无关的字节码不同平台有对应的JVM实现JVM将字节码翻译成特定平台的机器码实现了代码的跨平台运行
字节码详解
字节码是Java跨平台的关键:
- 平台无关性:字节码不依赖于特定的硬件平台
- 中间表示:介于源代码和机器码之间的中间形式
- JVM指令:由JVM定义的指令集组成
- 安全性:在JVM的安全沙箱中执行
# 使用javap命令查看字节码
javap -c HelloWorld
# 输出示例(部分):
Compiled from "HelloWorld.java"
public class HelloWorld {
public HelloWorld();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello, World!
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
JVM内存结构
JVM管理着程序运行时的内存,主要包括以下区域:
- 方法区(Method Area):存储类信息、常量、静态变量等
- 堆内存(Heap):存储对象实例和数组
- 栈内存(Stack):存储局部变量和方法调用信息
- 程序计数器(PC Register):记录当前执行的指令地址
- 本地方法栈(Native Method Stack):支持本地方法调用
内存管理:JVM自动管理内存分配和回收,开发者不需要手动管理内存,这大大降低了内存泄漏的风险。
常见问题解答
为什么需要JVM?
JVM提供了以下重要功能:
- 实现跨平台运行
- 自动内存管理
- 提供安全沙箱
- 优化程序执行
- 统一的异常处理机制
JDK版本如何选择?
版本选择建议:
- 学习阶段:选择LTS版本(JDK 11或17)
- 企业开发:根据项目需求选择稳定版本
- 新项目:推荐使用最新的LTS版本
- 维护项目:保持与现有环境一致
本章小结
- JDK是完整的Java开发工具包,包含开发和运行环境
- JRE是Java运行环境,包含JVM和核心类库
- JVM是Java虚拟机,负责执行字节码
- 三者关系:JDK ⊃ JRE ⊃ JVM
- Java通过字节码和JVM实现跨平台特性
- JVM提供自动内存管理和安全机制
评论
0 条
还没有评论,先写一条吧。