JDK、JRE、JVM 的区别是什么? 三者有什么关系 ?

更新时间 2022-12-15 15:08:48

在说明 JDK 、JRE 、JVM 的区别与关系之前,有必要知道它们是什么,都是干什么的。

JDK

JDK 全称 "Java Development Kit", 意为 Java 语言软件开发工具包,从事 Java 开发第一件事就是安装它。它提供了 Java 的开发工具、编译、运行 Java 程序所需的各种工具和资源,包括 Java 编译器、Java 运行时环境,以及常用的 Java 类库等。

我们打开 JDK 1.8 的安装目录,内容大致如下:

JDK 1.8 目录下的文件JDK 1.8 目录下的文件

解释一下各目录、文件都是干什么的:

  • bin 目录:Java 工具的可执行文件,包括: java、Java 编译器 javac、反编译.class 文件 javap、密钥管理工具 keytool、Java 文档工具 javadoc 等。
  • include 目录:.h 头文件,C 语言开发时用到的头文件。比如 jni.h 是开发 jni 程序时必须引用的头文件。
  • jre 目录:Java 运行环境。
  • legal 目录:用 markdown 写的法律文件,供人阅读的,类似于 readme、license 之类的文件
  • lib 目录:Java 类库,我们经常看到的 dt.jar 和 tools.jar 就在这个目录下。
  • COPYRIGHT 文件:版权信息。
  • src.zip 文件:Java 类库源码,包括了 rt.jar 库中的关键部分;除了 Java 类库,还包含了启动器(launcher)的源码(C 语言实现)。

JRE

JRE 是 Java Runtime Environment 的缩写,意为 Java 运行环境,它是 JDK 的子集,也就是说 JDK 包括 JRE 所有内容,以及开发应用程序所需的编译器和调试器等工具。JRE 提供了库、Java 虚拟机(JVM)和其他组件,用于运行 Java 编程语言、应用程序。JRE 的安装目录里面有两个文件夹 bin 和 lib。

JRE 目录内容JRE 目录内容

解释一下各目录、文件都是干什么的:

  • bin 目录:包含 Java 平台所使用工具和类库的可执行文件和 DLL 文件。
  • lib 目录:Java 运行时环境所使用的核心类库。
  • legal 目录:用 markdown 写的法律文件,供人阅读的,类似于 readme、license 之类的文件

JVM

JVM 是 Java Virtual Machine 的缩写,意为 Java 虚拟机,它是 JRE 的一部分。它是整个 Java 实现跨平台的最核心的部分。JVM 可以理解为是一个虚拟出来的计算机,是可运行 Java 字节码文件的虚拟计算机。

它主要负责把 Java 程序生成的字节码文件,解释成具体系统平台上的机器指令,让其在各个平台运行。当使用 Java 编译器编译 Java 程序时,生成的是与平台无关的字节码,这些字节码只面向 JVM。

不同平台的 JVM 都是不同的,但它们都提供了相同的接口。JVM 是 Java 程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的 Java 字节码就可以在该平台上运行。要想在不同的操作系统上运行 Java 程序,就需要在不同操作系统上安装对应的 JVM。所以,JVM 有 Windows 版本、MAC 版本、Linux 版本等。

三者之间的区别与关系

下图是从 Oracle 官网摘下来的图片,解释了 JDK、JRE、JVM 之间的关系(JVM 在倒数第二层,倒数第一层为操作系统):

Oracle 官方解释的 JDK、JRE、JVM 直接的关系Oracle 官方解释的 JDK、JRE、JVM 直接的关系

上图中涉及的组件非常多,下面小哈手绘了一张更简单的图,来解释三者之间的关系:

JDK、JRE、JVM 三者之间的关系JDK、JRE、JVM 三者之间的关系

简单一句话总结三者之间的关系:JDK 中包括了 JRE, JRE 中包含 JVM 。