Java虚拟机(JVM)是提供运行时环境以驱动Java代码或应用程序的引擎。它将Java字节码转换为机器语言。JVM是Java运行环境(JRE)的一部分。在其他编程语言中,编译器为特定系统生成机器代码。但是,Java编译器会为称为Java虚拟机的虚拟机生成代码。
JVM架构
让我们了解JVM的体系结构。它包含类加载器,内存区域,执行引擎等。

1. 执行Java程序

JVM负责执行Java程序的关键步骤如下:
- 加载: JVM加载Java字节码文件(以.class文件形式存在)。
- 解释/编译: JVM可以将字节码解释成本地机器代码(解释执行),也可以使用即时编译器(JIT)将字节码编译成本地机器代码来提高执行效率。
- 运行: JVM执行字节码并管理程序的运行过程,包括内存管理、垃圾回收、异常处理等。
2. 架构
JVM包括三个主要的子系统:
- 类加载器子系统(Class Loader Subsystem): 负责加载类文件到内存中,并将其转换为能够被JVM使用的形式。
- 运行时数据区(Runtime Data Area): 包括方法区、堆、栈、程序计数器和本地方法栈。这些区域用于存储程序执行时的数据、方法信息、对象实例等。
- 执行引擎(Execution Engine): 负责执行字节码文件,可以使用解释器将字节码逐行解释执行,也可以使用即时编译器将字节码编译成本地机器代码执行。
3. 功能和特性
- 跨平台性(Platform Independence): Java程序编译后生成的字节码可以在任何安装了对应JVM的平台上运行,实现了”一次编写,到处运行”的特性。
- 自动内存管理(Automatic Memory Management): JVM负责Java程序的内存分配和垃圾回收,开发者不需要手动管理内存,而是依赖于JVM的垃圾回收机制进行自动内存管理。
- 安全性(Security): JVM提供安全管理机制,包括类加载器、字节码校验、安全沙箱等,确保Java程序的安全性。
4. JVM的实现
Oracle JDK和OpenJDK是最常见的JVM实现,但也有其他供应商提供的JVM,比如IBM的J9 JVM等。不同的JVM实现可能有一些性能、调优工具或管理特性上的差异。
总体来说,Java虚拟机是Java平台的核心,它使得Java语言具备了跨平台、自动内存管理、安全性等优势,成为了广泛应用于企业级开发和多种场景下的编程语言。
Java VM中的Java代码编译和执行
让我们看一下JAVA的过程。在您的主体中,您有两种方法f1和f2。
- 主要方法存储在文件a1.java中
- f1作为a2.java存储在文件中
- f2作为a3.java存储在文件中

编译器将编译这三个文件,并生成3个对应的.class文件,该文件由BYTE代码组成。与C不同,没有链接完成。
Java VM或Java虚拟机位于RAM上。在执行期间,使用类加载器将类文件带到RAM中。验证BYTE代码是否存在任何安全漏洞。

接下来,执行引擎会将字节码转换为本机代码。这只是在及时编译。这是Java相对较慢的主要原因之一。

注意: JIT或即时编译器是Java虚拟机(JVM)的一部分。它同时解释字节代码中具有相似功能的部分。
为什么Java既是解释语言又是编译语言?
编程语言分类为
- 高级语言例如 C ++,Java
- 中级语言 例如C
- 低级语言汇编
- 最后是最低级别的机器语言。
编译器是将程序从一种语言转换为另一种语言的程序。将C ++程序转换为机器代码的示例。
Java编译器将高级Java代码转换为字节码(这也是机器代码的一种)。
解释器是将一个级别的程序转换为同一级别的另一种编程语言的程序。
在Java中,即时代码生成器(JIT)将字节码转换为具有相同编程级别的本机代码。
因此,Java既是编译语言,也是解释语言。
为什么Java速度慢?
Java缓慢背后的两个主要原因是
- 动态链接:与C不同,每次在Java中运行程序时,链接都是在运行时完成的。
- 运行时解释器(JIT):将字节码转换为本地机器代码是在Java的运行时完成的,这进一步降低了速度
但是,Java的最新版本已在很大程度上解决了性能瓶颈。
总结:
- JVM的完整形式是Java虚拟机。JVM是驱动Java代码的引擎。它将Java字节码转换为机器语言。
- 在JVM中,Java代码被编译为字节码。该字节码在不同的机器上被解释
- JIT代表即时编译器。JIT是Java虚拟机(JVM)的一部分。用于加快执行时间
- 与其他编译器计算机相比,Java执行速度可能较慢。