Java 中的 JDK vs JRE vs JVM – 它们之间的区别
JDK、JRE 和 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 是一个用于创建 Applet 和 Java 应用程序的软件开发环境。JDK 的全称是 Java Development Kit。Java 开发人员可以在 Windows、macOS、Solaris 和 Linux 上使用它。JDK 帮助他们编写和运行 Java 程序。可以在同一台计算机上安装多个 JDK 版本。
什么是 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?
以下是使用 JDK 的重要原因
- JDK 包含编写 Java 程序所需的工具,JRE 用于执行它们。
- 它包括编译器、Java 应用程序启动器、Appletviewer 等。
- 编译器将用 Java 编写的代码转换为字节码。
- Java 应用程序启动器会打开一个 JRE,加载必要的类,并执行其 main 方法。
为什么要使用 JRE?
以下是使用 JRE 的重要原因
- JRE 包含类库、JVM 和其他支持文件。它不包含任何用于 Java 开发的工具,如调试器、编译器等。
- 它使用重要的包类,如 math、swingetc、util、lang、awt 和运行时库。
- 如果您需要运行 Java Applet,则必须在系统中安装 JRE。
为什么使用 JVM?
以下是使用 JVM 的重要原因
- JVM 提供了一种独立于平台的执行 Java 源代码的方式。
- 它拥有众多库、工具和框架。
- 一旦您运行 Java 程序,就可以在任何平台上运行,节省大量时间。
- JVM 配备了 JIT(即时)编译器,可将 Java 源代码转换为低级机器语言。因此,它的运行速度比常规应用程序更快。
JDK 的特点
以下是 JDK 的重要特点
- 它使您可以在单个 catch 块中处理多个异常。
- JDK 包含 JRE 的所有功能。
- 它包含编译器、调试器等开发工具。
- JDK 提供开发和执行 Java 源代码的环境。
- 它可以安装在 Windows、Unix 和 Mac 操作系统上。
- 可以使用 Diamond 操作符指定泛型类型接口,而无需编写精确的类型。
JRE 的特点
以下是 JRE 的重要特点
- Java Runtime Environment 是一组工具,JVM 实际上是使用这些工具运行的。
- JRE 包含部署技术,包括 Java Web Start 和 Java Plug-in。
- 开发人员可以在 JRE 中轻松运行源代码,但不能编写和编译 Java 程序。
- 它包括集成库,如 Java Database Connectivity (JDBC)、Remote Method Invocation (RMI)、Java Naming and Directory Interface (JNDI) 等。
- JRE 包含 JVM 和 Java HotSpot 虚拟机客户端。
JVM 的特点
以下是 JVM 的重要特点
- 它使您能够在云环境中或您的设备中运行应用程序。
- Java Virtual Machine 将字节码转换为特定于机器的代码。
- 它提供基本的 Java 功能,如内存管理、安全、垃圾收集等。
- JVM 使用 Java 运行时环境提供的库和文件来运行程序。
- JDK 和 JRE 都包含 Java Virtual Machine。
- 它可以逐行执行 Java 程序,因此也被称为解释器。
- JVM 易于定制,例如,您可以为其分配最小和最大内存。
- 它独立于硬件和操作系统。因此,您可以编写一次 Java 程序,并在任何地方运行。
JDK 如何工作?
以下是 JDK 的重要组成部分
- JDK 和 JRE:JDK 使程序员能够创建由 JRE 运行的核心 Java 程序,JRE 包含 JVM 和类库。
- 类库:它是一组可动态加载的库,Java 程序可以在运行时调用。
- 编译器:这是一个 Java 程序,它接受开发者的文本文件并将其编译成 Java 类文件。这是编译器输出的常见形式,其中包含 Java 字节码。在 Java 中,主要编译器是 Javac。
- 调试器:调试器是一个 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) 本机方法库
本机库是执行引擎所需的本机库(C、C++)的集合。
JDK、JRE 和 JVM 之间的区别
以下是 JDK vs. JRE vs. 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 这两个软件中。 |