当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java JIT和JVM的区别用法及代码示例


Java虚拟机(JVM)用于java运行环境(JRE)。最初的 JVM 被认为是字节码解释器。由于性能问题,这可能会让人感到有点意外。许多现代语言都旨在编译成CPU-specific可执行代码。然而,JVM 执行 Java 程序这一事实有助于解决与基于 Web 的应用程序相关的主要问题。

JVM 执行 Java 程序这一事实也有助于使其稳定。由于JVM负责,程序的执行是由它控制的。因此,JVM 可以构建一个称为沙箱的有限执行区域,其中包含软件,从而防止系统获得无限制的访问。 Java 语言中存在的一些限制也改进了保护。 Java的JVM架构包括类加载器、执行引擎、内存字段等。

为了理解差异,让我们通过说明 JVM 的工作原理来深入了解这些组件。

  • ClassLoader类加载器的目的是加载类文件。它有助于完成三个主要函数:加载、初始化和链接。
  • JVM语言栈Java 内存存储局部变量和部分计算结果。每个线程都有自己的 JVM 堆栈,在创建线程时创建。调用该方法时,将创建一个新框架,然后将其删除。
  • 方法区:JVM 方法区专门存储 Java 应用程序的元数据和 code-behind 文件。
  • 电脑寄存器:当前正在执行的Java虚拟机指令地址由PC寄存器保存。 Java 中的每个线程都有自己独立的 PC 寄存器。
  • Heap:堆中保存了所有对象、数组和实例变量。该内存在多个线程之间共享。
  • 执行引擎:它是一种用于测试软件、硬件或完整系统的软件形式。测试执行引擎从不携带任何有关被测试产品的信息。
  • 本机方法库执行引擎需要本机库(C、C++),而作为编程框架的本机方法接口是本机方法接口。这使得在 JVM 中运行的 Java 代码能够调用库和本机应用程序。此外,本机方法堆栈具有取决于本机库的本机代码命令。它将存储分配给本机堆或使用任何堆栈类型。

即时 (JIT) 编译器

虽然 Java 是作为解释性语言开发的,但为了提高性能,Java 并不会阻止 bytecode 即时编译为本机代码。因此,在 Java 首次发布后不久,HotSpot JVM 就发布了。 HotSpot 中包含即时 (JIT) 字节码编译器。即时 (JIT) 编译器是 JVM 的一部分,根据 piece-by-piece 需求,字节码的选定部分被实时编译为可执行代码。也就是说,根据执行期间的需要,JIT 编译器会编译代码。此外,并非所有字节码序列都会被编译,只有那些将从编译中受益的字节码序列才会被编译。然而,即时方法仍然会导致效率低下。即使对字节码应用动态编译,由于JVM仍然控制着执行环境,因此可移植性和安全性函数仍然存在。

为了理解差异,让我们通过说明 JIT 的工作原理来深入了解组件。

解释字节码时,JVM 的标准实现会减慢程序的执行速度。 JIT 编译器在运行时与 JVM 交互,以提高性能并将适当的字节码序列编译为本机机器代码。

硬件而不是 JVM(Java 虚拟机)解释代码。这可以提高执行速度。这可以在 per-file、per-function 或任何任意代码片段上完成;代码通常在接近执行时进行编译(因此得名“just-in-time”),然后进行缓存并在以后重用,而无需重新编译。它执行许多优化:数据分析、从堆栈操作到注册表操作的转换、通过注册表分配减少内存访问、消除公共子表达式。

因此,根据上述知识,我们得出了它们之间的决定性差异,如下表所示:

JVM

JIT

JVM 代表 Java 虚拟机。 JIT 代表即时编译。
引入 JVM 是为了管理系统内存并为基于 Java 的应用程序提供可传输的执行环境 JIT 最初发布多年后,是为了提高 JVM 的性能而发明的。
JVM 由许多其他组件组成,例如堆栈区域、堆区域等。 JIT是JVM的组件之一。
JVM 将完整的字节代码编译为机器代码。 JIT 仅将可重用的字节代码编译为机器代码。
JVM 提供平台独立性。 JIT 提高了 JVM 的性能。

相关用法


注:本文由纯净天空筛选整理自priyavermaa1198大神的英文原创作品 Difference between JIT and JVM in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。