第3章

JDK、JRE和JVM

理解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主要组件:

JRE (Java Runtime Environment)

JRE是Java运行环境,包含了运行Java程序所需的最小环境。如果只需要运行Java程序而不需要开发,安装JRE就足够了。

JRE主要组件:

JVM (Java Virtual Machine)

JVM是Java虚拟机,是Java跨平台特性的核心。它是一个抽象的计算机,有自己的指令集和内存管理机制。

JVM主要功能:

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实现的:

跨平台机制:
  1. Java源代码编译成平台无关的字节码
  2. 不同平台有对应的JVM实现
  3. JVM将字节码翻译成特定平台的机器码
  4. 实现了代码的跨平台运行

字节码详解

字节码是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管理着程序运行时的内存,主要包括以下区域:

内存管理:JVM自动管理内存分配和回收,开发者不需要手动管理内存,这大大降低了内存泄漏的风险。

常见问题解答

为什么需要JVM?

JVM提供了以下重要功能:

JDK版本如何选择?

版本选择建议:
  • 学习阶段:选择LTS版本(JDK 11或17)
  • 企业开发:根据项目需求选择稳定版本
  • 新项目:推荐使用最新的LTS版本
  • 维护项目:保持与现有环境一致

本章小结

下一章:第一个Java程序 章节测试