初探Java世界:Java概述与JIT和JVM的对比

发表时间: 2023-12-08 18:18

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



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

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

· ClassLoader类加载器的目的是加载类文件。它帮助完成三个主要功能:加载、初始化和链接。

· JVM 语言堆栈 Java 内存存储局部变量和部分计算结果。每个线程都有自己的 JVM 堆栈,在创建线程时创建。调用该方法时,将创建一个新框架,然后将其删除。

· 方法区: JVM 方法区专门存储 Java 应用程序的元数据和代码隐藏文件。

· PC寄存器: PC寄存器保存当前正在执行的Java虚拟机指令地址。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 代表 Java 虚拟机。

JIT 代表即时编译。

引入 JVM 是为了管理系统内存并为基于 Java 的应用程序提供可传输的执行环境

JIT 最初发布多年后,是为了提高 JVM 的性能而发明的。

JVM 由许多其他组件组成,例如堆栈区域、堆区域等。

JIT是JVM的组件之一。

JVM 将完整的字节代码编译为机器代码。

JIT 仅将可重用的字节代码编译为机器代码。

JVM 提供平台独立性。

JIT 提高了 JVM 的性能。