JDK、JRE、JVM之间是包含关系,具体为JDK>JRE>JVM。详细解释如下:
1. JDK是什么?有哪些内容组成?
JDK(Java Development Kit,Java开发工具包)
JDK 是 Java 开发人员用于开发 Java 应用程序的工具包。它是一个面向开发者的完整环境,包含编译、调试、运行 Java 程序所需的一切。
组成部分
JDK 包括以下主要部分:
-
JVM(Java Virtual Machine,Java虚拟机)
- JVM 是 Java 程序的运行环境,负责将 Java 字节码(.class 文件)解释或编译为机器可以理解的指令并执行。
- 它具有平台无关性,是 Java "一次编译,到处运行"的核心。
-
核心类库(Core Libraries)
- 这是 Java 的标准库,包含了 Java 语言提供的基础功能,比如数据结构(集合框架)、I/O操作、多线程支持、网络编程、数据库操作等。开发者无需重新编写这些功能,可以直接调用核心类库中的现成方法。
- 示例:
java.util.*
(集合框架)、java.io.*
(文件I/O)、java.net.*
(网络通信)。
-
开发工具(Development Tools)
- 编译工具:将 Java 源代码(.java 文件)编译为字节码文件(.class 文件)。
javac
:编译器。
- 运行工具:运行 Java 程序。
java
:Java 程序启动器。
- 调试工具:帮助开发者调试代码。
jdb
:Java 调试工具。
- 其他工具:
javadoc
:生成文档的工具。jarsigner
:签署 JAR 文件的工具。jhat
:分析堆转储的工具。
- 编译工具:将 Java 源代码(.java 文件)编译为字节码文件(.class 文件)。
-
附加库(Optional Libraries)
- 某些 JDK 还附带其他扩展库,用于支持高级功能,例如 JavaFX(图形界面开发)。
-
Java 应用示例代码和演示
- JDK 中可能包括一些官方提供的示例代码,供开发者学习和参考。
JDK 的主要用途
- 编写、编译和运行 Java 程序。
- 通过调试工具检测和解决代码中的问题。
- 生成 API 文档。
2. JRE是什么?有哪些内容组成?
JRE(Java Runtime Environment,Java运行时环境)
JRE 是 Java 程序运行所需的环境,它不包含开发工具,主要面向普通用户和生产环境中运行 Java 程序的需求。JRE 是 JDK 的一个子集。
组成部分
-
JVM(Java Virtual Machine,Java虚拟机)
- 同 JDK 中的 JVM,负责解释和执行 Java 字节码。
-
核心类库(Core Libraries)
- 包含支持 Java 程序运行所需的所有标准类库。开发者可以利用这些类库实现文件操作、数据处理、网络通信等功能。
-
运行工具(Runtime Tools)
- java:Java 程序启动器,用于运行 Java 应用程序。
- javaw:类似于
java
,但不弹出控制台窗口,常用于图形化界面程序(如 JavaFX 应用)。 - 其他工具:如支持运行 Java Web Start 应用的工具(已逐步淘汰)。
JRE 的主要用途
- 提供运行 Java 应用程序的环境,无需包含开发工具。
- 是普通用户安装 Java 程序(如 IntelliJ IDEA、Minecraft 等 Java 应用)的必要组件。
3. JDK、JRE、JVM 三者的包含关系
包含关系概述
- JDK 包含 JRE,JRE 包含 JVM。
- 当已经把代码写完,并且编译成.class文件,要将.class文件直接交给别人运行(也就是说用户在使用已经由Java编译好的软件时,比如Minecraft-我的世界),此时已经不需要javac(Java编译工具)、jdb(Java调试工具)等开发时所需要的文件了,所以在JRE中将这些文件删除,形成了占用内存更小,只用于运行的JRE。
- 换句话说:
- JVM 是核心,它是 Java 程序执行的环境,无论是JDK还是JRE都需要JVM。Java程序的编译和运行都是在JVM(全称“Java virtual machine”,即Java虚拟机)中进行的,并非直接在电脑或手机中进行编译和运行,这与C语言、python语言不同,这些语言都是直接运行在电脑或手机中的。
- JRE 是 JVM 的运行环境,除了 JVM 外,还包括核心类库和运行工具。
- JDK 是开发工具包,除了包含 JRE 外,还增加了编译器和其他开发工具。
层级结构
-
JVM
- 是 Java 字节码的运行环境。
- 直接负责程序的执行。
- 不包含任何标准类库或工具。
-
JRE
- 包含 JVM 和支持其运行的核心类库及工具。
- 专注于 Java 程序的运行。
-
JDK
- 包含 JRE,以及编译器(javac)、调试工具(jdb)、文档生成工具(javadoc)等开发工具。
- 是开发者的主要工作环境。
类比理解
- JVM 相当于汽车的“引擎”,直接驱动程序运行。
- JRE 相当于汽车的“基础配置”,包含了引擎和支持正常运行的部件(如油箱、轮胎)。
- JDK 相当于汽车的“生产线”,既包含基础配置,也包含开发和制造汽车的工具。
总结与扩展知识
-
为什么需要 JVM?
- JVM 实现了 Java 的跨平台特性:开发者只需编写一次代码,无需针对不同平台重新编译,JVM 会在对应平台上解释执行。
- 不同操作系统(如 Windows、Linux、MacOS)有各自的 JVM 实现,但它们运行同样的 Java 字节码。
-
为什么需要 JRE?
- 普通用户无需关心代码编译,只需运行程序。JRE 简化了这种需求,去除了编译工具。
-
为什么需要 JDK?
- 开发者需要编写和测试 Java 应用程序,JDK 提供了一个全面的开发环境。