理解Java运行环境的核心组件和关系
Java平台由三个核心组件构成,它们各自承担不同的职责,共同构成了完整的Java开发和运行环境:
Java开发工具包
Java运行环境
Java虚拟机
JDK是Java开发工具包,是Java开发者必须安装的软件包。它包含了开发Java应用程序所需的所有工具和库。
JRE是Java运行环境,包含了运行Java程序所需的最小环境。如果只需要运行Java程序而不需要开发,安装JRE就足够了。
JVM是Java虚拟机,是Java跨平台特性的核心。它是一个抽象的计算机,有自己的指令集和内存管理机制。
# 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跨平台的关键:
# 使用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提供了以下重要功能: