📜  JavaJIT和JVM的区别

📅  最后修改于: 2021-09-13 02:04:59             🧑  作者: Mango

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.