Skip to content

JVM 概述

什么是JVM?JVM,全称Java Virtual Machine,译为Java虚拟机,作用是执行Java字节码。

我们都知道Java有一句话很出名:“Write Once,Run Anywhere(一次编写,四处运行)”,即我们写的Java代码可以在各个操作系统上执行,这就是通过JVM实现的,因为Java官方提供了各个操作系统下的JVM实现。Java程序的执行过程是先编译,后解释,首先使用Java编译器(javac.exe)将我们编写的源代码文件(.java)编译为字节码文件(.class),然后JVM读取字节码文件,并将其解释为平台特定的指令,交予操作系统执行。

总结来说,JVM 是 Java 语言实现平台无关性的关键,它负责将 Java 字节码翻译成目标机器可以执行的指令,并提供运行时环境和自动内存管理等功能,使得 Java 程序可以在各种不同的操作系统上运行。

1. JVM结构

虽然具体实现可能不同,但通常 JVM 包含以下主要组件:

  • 类加载器 (ClassLoader): 负责加载 .class 文件,即将字节码文件加载到内存中。
  • 运行时数据区 (Runtime Data Areas): JVM 在运行时使用的内存区域,包括方法区、堆、栈、程序计数器和本地方法栈等。
  • 执行引擎 (Execution Engine): 负责执行字节码,可以使用解释器逐条解释执行,也可以使用即时编译器将热点代码编译成本地机器码执行。也包含垃圾回收器,用于运行时动态内存管理。
  • 本地方法接口 (Native Method Interface): 允许 Java 代码调用本地(非 Java)代码。
  • 本地方法库 (Native Method Libraries): 支持本地方法接口的本地代码库。

概述图:

image-20250315115725525

详细图:

image-20250315115759868

2. JVM实现

JVM只是Java官方提出的规范,JVM 规范定义了 JVM 应该做什么,但没有规定如何具体实现。各个厂商可以根据规范实现具体的JVM。

  • Sun Classic VM:1996年Java 1.0版本时,Sun公司发布的一款JVM,是世界上第一款商用Java虚拟机,JDK 1.4时完全被淘汰。

  • Oracle HotSpot:这是 Oracle 提供的 JVM 实现,也是最广泛使用的 JVM 之一。

  • IBM J9/OpenJ9 (Eclipse OpenJ9):IBM 开发的 JVM 实现,现在是 Eclipse Foundation 的开源项目。

  • GraalVM: Oracle Labs 开发的多语言虚拟机,可以运行 Java 字节码,并支持即时编译成本地代码。

  • TaobaoJVM:由AliJVM团队发布,是基于OpenJDK HotSpot VM发布的国内第一个优化、深度定制且开源的高性能服务器版Java虚拟机。

接下来的章节是基于HotSpot VM介绍的。

参考资料