Java虚拟机(JVM) 用于Java运行时环境 (JRE)。最初的 JVM 被设想为字节码解释器。由于性能问题,这可能有点令人惊讶。许多现代语言旨在编译为特定于 CPU 的可执行代码。然而,JVM 执行Java程序这一事实有助于解决与基于 Web 的应用程序相关的主要问题。
JVM 执行Java程序这一事实也有助于使其稳定。由于JVM负责,程序执行由它控制。因此,JVM 可以构建一个称为沙箱的有限执行区域,其中包含软件,从而防止系统获得无限制的访问权限。 Java语言中存在的一些限制也改进了保护。 Java 的 JVM 架构包括类加载器、执行引擎、内存字段等。
为了理解差异,让我们通过说明 JVM 的工作来深入了解组件。
- ClassLoader :类加载器的目的是加载类文件。它有助于完成三个主要功能:加载、初始化和链接。
- JVM 语言堆栈: Java内存存储局部变量和计算的部分结果。每个线程都有自己的 JVM 堆栈,在创建线程时创建。调用该方法时,将创建一个新框架,然后将其删除。
- 方法区: JVM 方法区专门存储Java应用程序的元数据和代码隐藏文件。
- PC 寄存器:当前正在执行的Java虚拟机指令地址由 PC 寄存器保存。 Java的每个线程都有自己独立的 PC 寄存器。
- 堆:在堆中保存所有对象、数组和实例变量。该内存在多个线程之间共享。
- 执行引擎:它是一种用于测试软件、硬件或完整系统的软件形式。测试执行引擎从不携带有关被测试产品的任何信息。
- 作为执行引擎的本地方法库需要本地库(C、C++),作为编程框架的本地方法接口是本地方法接口。这使得在 JVM 中运行的Java代码能够调用库和本机应用程序。此外,本机方法堆栈具有本机代码命令,具体取决于本机库。它将存储分配给本机堆或使用任何堆栈类型。
及时(JIT)编译器
虽然Java是作为一种解释型语言开发的,但为了提高性能, Java并没有阻止将字节码动态编译为本机代码。因此,在 Java 最初发布后不久,HotSpot JVM 就发布了。 HotSpot 中包含一个即时 (JIT) 字节码编译器。即时 (JIT) 编译器是 JVM 的一部分,在逐个需求的基础上,字节码的选定部分被实时编译为可执行代码。也就是说,在执行过程中,JIT 编译器编译代码是必要的。此外,并非所有字节码序列都被编译,只有那些将从编译中受益的字节码序列。然而,准时制方法仍然会大大提高效率。即使对字节码应用动态编译,可移植性和安全性函数仍然存在,因为 JVM 仍然控制着执行环境。
为了理解差异,让我们通过说明 JIT 的工作来深入了解组件。
解释字节码,JVM 的标准实现减慢了程序的执行。 JIT 编译器在运行时与 JVM 交互以提高性能并将适当的字节码序列编译为本地机器代码。
硬件正在解释代码而不是 JVM(Java虚拟机)。这可以提高执行速度的性能。这可以按文件、按函数或在任何任意代码片段上完成;代码通常在即将执行时编译(因此称为“即时”),然后缓存并在以后重用,而无需重新编译。它执行许多优化:数据分析、从堆栈操作到注册表操作的转换、通过注册表分配减少内存访问、消除公共子表达式。
因此,根据上述知识,我们得出了它们之间的决定性差异,如下表所示:
JVM |
JIT |
---|---|
JVM stands for Java Virtual Machine. | JIT stands for Just-in-time compilation. |
JVM was introduced for managing system memory and providing a transportable execution environment for Java-based applications | JIT was invented to improve the performance of JVM after many years of its initial release. |
JVM consists of many other components like stack area, heap area, etc. | JIT is one of the components of JVM. |
JVM compiles complete byte code to machine code. | JIT compiles only the reusable byte code to machine code. |
JVM provides platform independence. | JIT improves the performance of JVM. |