JDK、JRE、JVM 的区别

JDK(Java Development Kit)、JRE(Java Runtime Environment)、JVM (Java Virtual Machine)是 Java 开发中的三个重要概念,JDK 包含了 JRE 和开发工具,JRE 包含了 JVM 和类库,JVM 是 Java 程序的运行环境。

下面是一张 Oracle 官方的 Java SE 8 相关概念图,很好的展示了三者之间的关系。

Java SE 8 相关概念图

在开发 Java 应用程序时,需要使用 JDK,而在运行 Java 应用程序时,只需要使用 JRE。

JDK

如果您想进行 Java 开发,需要先安装 JDK。JDK(Java Development Kit)是 Java 开发工具包的缩写,是 Java 开发的基础,可以简单的理解 JDK 就是 Java 开发的软件环境,如果没有它,我们很难进行 Java 开发。JDK 包含了 Java 编译器、Java 虚拟机、Java 标准库等组件,可以用于开发和运行 Java 应用程序。

JDK 包含很多组件,如:

  1. Java 编译器:将 Java 代码编译成字节码的工具,可以将 Java 代码转换成可在 Java 虚拟机上运行的字节码文件。
  2. Java 虚拟机:Java 虚拟机是 Java 程序的运行环境,可以在不同的操作系统上运行 Java 应用程序。
  3. Java 标准库:Java 标准库是 Java 开发的基础,包含了输入输出、集合框架、多线程、网络编程等方面的内容。
  4. Java 开发工具:JDK 包含了一些 Java 开发工具,如 javac、java、javadoc等,可以用于编译、运行和生成文档等操作。
  5. JavaFX:JavaFX 是 Java 的一个图形界面库,可以用于开发桌面应用程序。

如果您想学习 Java 开发,需要先安装 JDK,并掌握 JDK 的基本使用方法。可以参考 Oracle 官方的 Java 教程 进行学习。

JRE

Java 的 JREJava Runtime Environment)是 Java 运行环境的缩写,是 Java 应用程序的运行环境。JRE 提供了在机器上运行 Java 程序的环境,因此 JRE 包含了 Java 虚拟机和 Java 应用程序所需的类库等组件。与 JDK 不同的是,JRE 不包含 Java 编译器和其他开发工具只包含 Java 运行环境所需的组件

如果您只需要运行 Java 应用程序,可以安装 JRE(JDK 中已经自带)。也可以从 Oracle 官网 下载 JRE。安装完成后,可以通过命令行或者双击运行 Java 应用程序。

例如,我们通常使用以下命令运行一个名为 HelloWorld.java 的 Java 程序:

java HelloWorld

其中 HelloWorld 是程序的类名,不需要加上 .java. 后缀。这个运行环境就是来自于 JRE。

JVM

Java 的 JVM(Java Virtual Machine)是 Java 虚拟机的缩写,它负责 Java 程序的具体运行。Java 程序在运行时,会被编译成字节码文件,然后由 JVM 解释执行,因此 JVM 也被称为解释器。JVM 可以在不同的操作系统上运行 Java 应用程序,保证了 Java 的跨平台性。

JVM 包含以下主要组件:

  1. 类加载器:将字节码文件加载到内存中,并生成对应的类对象。
  2. 运行时数据区:包括方法区、堆、栈、程序计数器等,用于存储 Java 程序运行时所需的数据。
  3. 执行引擎:解释执行字节码文件,将字节码文件转换成机器码并执行。
  4. 本地方法接口:调用本地方法库,实现 Java 程序与本地系统的交互。

JVM 是 Java 程序运行的核心,保证了 Java 的跨平台性和安全性。如果您想深入了解 JVM 的原理和实现,可以参考 Java 虚拟机规范

总结

简单的描述下 JDK、JRE、JVM 三者之间的关系,可以通过下面的流程中进行说明。

使 Java 文件编译成 class 文件,这一步需要使用 JDK 开发工具中 javac 进行编译。

javac Hello.java -> Hello.class

执行 Hello.class ,需要用到 JRE 环境,且需要加载 JRE 的各种类库,如 ArrayList,不然在 Hello.java 中使用的 ArrayList 就不能找到。

java Hello

在执行 Hello.class 时,JVM 会加载 Hello 的字节码内容,进行校验后执行字节码内容,同时调用底层硬件进行处理。

参考资料:

其他资料

  1. Oracle Java 官方网址 @ https://www.oracle.com/technetwork/java/index.html.
  2. OpenJDK 官方网址 @ https://openjdk.java.net/.
  3. Java 文档 @ https://docs.oracle.com/en/java/index.html.
  4. JDK 在线 API @ https://docs.oracle.com/en/java/javase/11/ (for JDK 11).