JDK、JRE 和 JVM:主要区别
什么是JDK?
JDK是用于制作小程序和Java应用程序的软件开发环境。 JDK 的完整形式是 Java Development Kit。 Java 开发人员可以在 Windows、macOS、Solaris 和 Linux 上使用它。 JDK 帮助他们编写和运行 Java 程序。可以在同一台计算机上安装多个 JDK 版本。
在本教程中,您将学习:
- 什么是JDK?
- 什么是 JRE?
- 什么是JVM?
- 为什么要使用 JDK?
- 为什么要使用 JRE?
- 为什么选择 JVM?
- JDK的特点
- JRE的特点
- JVM的特点
- JDK如何运作?
- JRE 是如何工作的?
- JVM如何运作?
- JDK、JRE、JVM的区别
什么是 JRE?
JRE 是一个旨在运行其他软件的软件。它包含类库、加载器类和 JVM。简单来说,如果你想运行 Java 程序,你需要 JRE。如果您不是程序员,则无需安装 JDK,只需安装 JRE 即可运行 Java 程序。不过,所有 JDK 版本都与 Java Runtime Environment 捆绑在一起,因此您无需在 PC 中单独下载和安装 JRE。 JRE的全称是Java Runtime Environment。
什么是JVM?
JVM 是一个引擎,它提供运行时环境来驱动 Java 代码或应用程序。它将 Java 字节码转换为机器语言。 JVM 是 Java 运行环境 (JRE) 的一部分。它不能单独下载和安装。要安装 JVM,您需要安装 JRE。 JVM的全称是Java Virtual Machine。
在许多其他编程语言中,编译器为特定系统生成机器代码。但是,Java 编译器会为称为 JVM 的虚拟机生成代码。
主要区别
- JDK 是一个软件开发工具包,而 JRE 是一个允许 Java 程序运行的软件包,而 JVM 是一个执行字节码的环境。
- JDK的全称是Java Development Kit,JRE的全称是Java Runtime Environment,而JVM的全称是Java Virtual Machine。
- JDK 是平台相关的,JRE 也是平台相关的,但 JVM 不是平台相关的。
- JDK 包含开发、调试等工具。JRE 包含类库和其他支持文件,而软件开发工具不包含在 JVM 中。
- JDK 自带安装程序,而 JRE 只包含执行源代码的环境,而 JVM 捆绑在软件 JDK 和 JRE 中。
为什么要使用 JDK?
以下是使用JDK的重要原因:
- JDK 包含编写 Java 程序和执行这些程序所需的 JRE 工具。
- 它包括编译器、Java 应用程序启动器、Appletviewer 等。
- 编译器将用 Java 编写的代码转换为字节码。
- Java 应用程序启动器打开一个 JRE,加载必要的类,并执行它的 main 方法。
为什么要使用 JRE?
以下是使用 JRE 的重要原因:
- JRE 包含类库、JVM 和其他支持文件。它不包含任何用于 Java 开发的工具,如调试器、编译器等。
- 它使用重要的包类,例如 math、swingetc、util、lang、awt 和运行时库。
- 如果您必须运行 Java 小程序,则必须在您的系统中安装 JRE。
为什么选择 JVM?
以下是使用JVM的重要原因:
- JVM 提供了一种独立于平台的方式来执行 Java 源代码。
- 它有许多库、工具和框架。
- 运行 Java 程序后,可以在任何平台上运行,节省大量时间。
- JVM 自带 JIT(Just-in-Time) 编译器,可将 Java 源代码转换为低级机器语言。因此,它作为常规应用程序运行得更快。
JDK的特点
这里是 JDK的重要特性:
- 它使您能够在单个 catch 块中处理多个扩展。
- JDK 包含了 JRE 的所有功能。
- 它包含开发工具,例如编译器、调试器等。
- JDK 提供了开发和执行 Java 源代码的环境。
- 它可以安装在 Windows、Unix 和 Mac 操作系统上。
- 菱形运算符可用于指定泛型类型接口,而不是编写确切的接口。
JRE的特点
这里是 JRE的重要特性:
- Java 运行时环境是一组工具,JVM 使用这些工具实际运行。
- JRE 包含部署技术,包括 Java Web Start 和 Java Plug-in。
- 开发人员可以轻松地在 JRE 中运行源代码,但不能编写和编译 Java 程序。
- 它包括 Java 数据库连接 (JDBC)、远程方法调用 (RMI)、Java 命名和目录接口 (JNDI) 等集成库。
- JRE 有 JVM 和 Java HotSpot 虚拟机客户端。
JVM的特点
以下是JVM的重要特性:
- 它使您能够在云环境或您的设备中运行应用程序。
- Java 虚拟机将字节码转换为特定于机器的代码。
- 它提供了基本的 Java 功能,例如内存管理、安全性、垃圾收集等。
- JVM 使用 Java Runtime Environment 提供的库和文件来运行程序。
- JDK 和 JRE 都包含 Java 虚拟机。
- 它可以逐行执行java程序,因此也称为解释器。
- JVM 易于定制,例如,您可以为其分配最小和最大内存。
- 它独立于硬件和操作系统。因此,您可以编写一次 Java 程序,然后在任何地方运行。
JDK如何运作?
<中心>
<图> 图>
以下是JDK的重要组件:
- JDK 和 JRE :JDK 使程序员能够创建可由 JRE 运行的核心 Java 程序,其中包括 JVM 和类库。
- 类库: 它是一组可动态加载的库,Java 程序可以在运行时调用。
- 编译器: 它是一个Java程序,接受开发人员的文本文件并编译成Java类文件。它是编译器给出的常见输出形式,包含Java字节码。在 Java 中,主要的编译器是 Javac。
- 调试器: Debugger 是一个 Java 程序,可让开发人员测试和调试 Java 程序。
- JavaDoc: JavaDoc 是 Sun Microsystems 为 Java 制作的文档。 JavaDoc 可用于从源程序生成 HTML 文件中的 API 文档
JRE 如何运作?
<中心>
<图> 图>
JRE 有一个 JVM 实例、库类和开发工具。一旦你编写并编译了 Java 代码,编译器就会生成一个包含字节码的类文件。
以下是 JRE 的重要组成部分:
- 类加载器: 类加载器加载运行 Java 程序所需的各种类。 JVM 使用三个类加载器,称为引导类加载器、扩展类加载器和系统类加载器。
- 字节码验证器: 字节码验证器会验证字节码,以免代码干扰解释器。
- 翻译: 加载类并验证代码后,解释器会逐行读取代码。
- 运行时: 运行时是一种主要用于编程的系统,用于描述特定程序运行的时间段。
- 硬件: 编译 Java 原生代码后,它会在特定的硬件平台上运行。
这样,Java程序就在JRE中运行了。
JVM 是如何工作的?
<中心>
<图> 图>
以下是JVM的重要组成部分:
1) 类加载器
类加载器是用于加载类文件的子系统。它执行三个主要功能,即。加载、链接和初始化。
2) 方法区
JVM 方法区存储类的结构,如元数据、Java 方法的代码和常量运行时池。
3) 堆
所有对象、数组和实例变量都存储在堆中。此内存在多个线程之间共享。
4) JVM 语言栈
Java 语言堆栈存储局部变量及其部分结果。每个线程都有自己的 JVM 语言堆栈,在创建线程时同时创建。方法调用时创建一个新框架,方法调用过程完成时将其移除。
5) PC 寄存器
PC 寄存器存储当前正在执行的 Java 虚拟机指令的地址。在 Java 中,每个线程都有其独立的 PC 寄存器。
6) 原生方法栈
本机方法栈保存本机代码的指令依赖于本机库。它在本机堆上分配内存或使用任何类型的堆栈。
7) 执行引擎
它是一种用于测试软件、硬件或完整系统的软件。测试执行引擎从不携带被测产品的任何信息。
8) 原生方法接口
本机方法接口是一个编程框架。它允许在 JVM 中运行的 Java 代码被库和本机应用程序调用。
9) 原生方法库
Native Libraries 是执行引擎所需的 Native Libraries(C、C++)的集合。
JDK、JRE、JVM的区别
以下是 JDK、JRE 和 JVM 之间的主要区别:
JDK | JRE | JVM |
---|---|---|
JDK的完整形式是Java Development Kit。 | JRE 的完整形式是 Java Runtime Environment。 | JVM的全称是Java Virtual Machine。 |
JDK 是一个用 Java 开发应用程序的软件开发工具包。 | 它是一个软件包,它为 Java 类库提供了运行 Java 代码所必需的组件。 | JVM执行Java字节码并提供执行环境。 |
JDK 依赖于平台。 | JRE 也依赖于平台。 | JVM 高度依赖平台。 |
它包含用于开发、调试和监控 java 代码的工具。 | 它包含JVM执行程序所需的类库和其他支持文件。 | JVM 中不包含软件开发工具。 |
是JRE的超集 | 它是JDK的子集。 | JVM 是 JRE 的一个子集。 |
JDK 使开发人员能够创建可由 JRE 和 JVM 执行和运行的 Java 程序。 | JRE 是创建 JVM 的 Java 部分。 | 它是执行源代码的Java平台组件。 |
JDK 自带安装程序。 | JRE 只包含执行源代码的环境。 | JVM 捆绑在软件 JDK 和 JRE 中。 |
java