在本教程中,我们将讨论 Java 架构及其几个组件。您将掌握三个重要的 Java 组件——JVM、JRE 和 JDK。这包括它们的工作原理以及它们之间的区别。
架构是所有共同定义系统的组件的基本规划,包括结构、接口、通信模式等。Java 的综合架构是多个组件的融合。下面展示了 Java 架构的概要草图。

Java 的首要组件是 Java 应用程序,它包含另外两个组件——Java 编程文件和 Java 类文件。Java 类文件是在编译 Java 源文件时创建的文件。在这里,源代码被转换为与机器无关的字节码。这些字节码随后被传递给 Java 运行时环境(JRE),这是 Java 的另一个重要组件。现在,字节码与类库集成,Java 虚拟机解释这些字节码并将其转换为本地机器码。因此,Java 体现了编译和解释两种技术。
JVM 代表 Java 虚拟机。顾名思义,JVM 表现得像一个虚拟处理器,是 Java 的核心元素之一。这个虚拟处理器的主要目标是解释字节码并将其转换为本地机器码。

JVM 在 Java 架构中的位置非常重要。如上图所示,JVM 是 JRE 的一部分,位于操作系统之上。这使得 JVM 能够轻松地与多个操作系统交互,从而使 Java 如此强大和可移植。
现在让我们深入了解 Java 虚拟机的工作系统。当您观察 Java 架构图时,您可以看到 JVM 由 3 个主要子系统构成。
类加载器子系统是 Java 虚拟机不可或缺的组成部分。类加载器子系统的职责不仅仅是查找和加载类文件到内存,它还负责验证导入类文件的正确性、为类变量分配和初始化内存等等。所有这些活动都是通过 3 个过程实现的,即
这是类加载器子系统的第一阶段,负责执行两个功能。首先是找到虚拟机为特定类请求的字节码文件,其次是将这些字节码加载到主内存中。根据类类型和类路径,类加载器分为三种类型。它们是
引导类加载器
这个中间阶段负责将类文件与 JVM 的运行时状态链接起来以便执行。该阶段始于验证过程,其中字节码验证器确保生成的字节码是正确的,即它遵守语言的语义并且不会破坏 JVM 的完整性。
紧接着的下一步是准备阶段,JVM 为所有静态变量分配内存,并根据变量类型为它们分配默认值。
链接阶段以一个称为解析的可选过程结束,在该过程中,JVM 将类、接口、方法等的所有符号引用替换为方法区的具体引用。
根据 Java 8 虚拟机规范的规定,类或接口的初始化包括执行其类或接口的初始化方法。
到达类加载的最后阶段,该类已准备好在应用程序中积极参与。初始化涉及两个主要功能
运行时数据区或内存区是 Java 虚拟机的第二个重要部分。Java 内存主要分为五个部分。它们是
执行引擎是 Java 虚拟机的核心部分,字节码的执行在此发生。正是这个阶段将人类可读的代码转换为机器语言可执行代码。
执行引擎由三个主要子组件组成。它们是
JNI 是一个非 Java 编程接口,用于您不能完全依赖 Java 编写应用程序的情况。有时,您可能需要合并用其他语言(如 C、C++ 等)编写的方法或库来运行您的应用程序。在这种情况下,您可以使用这个本地方法接口,它允许在 JVM 内部执行的 Java 代码与其他语言编写的应用程序和库协同工作。使用此 JNI 框架的主要优点是代码可重用性和高性能。
Java 本地库是包含用非 Java 语言(例如 C、C++ 等)编写的代码或应用程序的库。它们可以根据需要在 JNI 的帮助下包含在 Java 应用程序中。
JRE 代表 Java 运行时环境。顾名思义,它主要用于运行 Java 代码。JRE 包含我们之前讨论过的 Java 虚拟机以及支持运行 Java applet 的其他浏览器插件和工具。JRE 是 JDK 的重要组成部分之一。
JDK,Java 开发工具包的简称,是一个功能丰富的软件开发环境,主要由 Java 程序员用于开发 Java 代码(Java 应用程序或 applet)。它包含构建和执行 Java 代码所需的各种工具,例如
因此,如果您是 JAVA 新手,请明确一点,要在您的系统中开发 Java 代码,您需要做的第一步是将 JDK 下载到您的开发环境中并设置路径。下载时,您可以选择所需的 Java 版本和 Java 版本。Java 版本有 3 种类型:
不要太担心 Java 的安装,您将在我们的下一个教程——WINDOWS 的 JAVA 安装和设置中逐步学习。
现在让我们通过比较这 3 个基本组件来总结我们迄今为止学到的所有内容。下面是参考 JVM、JRE 和 JDK 之间关联的最佳可视化图。

差异在下表中列出
| JDK | JRE | JVM | |
|---|---|---|---|
| 代表 | Java 开发工具包 | Java 运行时环境 | Java 虚拟机 |
| 是 | 软件开发工具 | 软件包 | 抽象机 |
| 用于 | 开发应用程序 | 运行应用程序 | 解释 |
| 依赖性 | 平台相关 | 平台相关 | 平台无关 |
| 包含 | JRE、JVM、类库、编译器、调试器等 | JVM、类库 | JDK 和 JRE 的子集 |