返回文章列表
JVM虚拟机
JVMJava入门

01初识 JVM

1.什么是JVM

JVM 全称是 Java Virtual Machine,中文译名 Java 虚拟机。它本质上是一个运行在计算机上的程序,其职责是运行 Java 字节码文件。

我们编写的 HelloWorld.java 源代码文件,通过 javac 命令编译后会生成 HelloWorld.class 字节码文件,再使用 java 命令启动 JVM 来解释运行这份字节码。JVM 会将字节码指令实时解释成计算机能够执行的机器码,最终交给计算机执行。

JVM 运行流程

2.JVM功能

JVM 的核心功能可以归纳为以下三个方面:

JVM 三大功能

  1. 解释和运行:对字节码文件中的指令,实时解释成机器码,让计算机执行。Java 之所以在不做优化时性能不如 C、C++,正是因为 C、C++ 编译后会直接生成可执行的机器码指令,而 Java 生成的是字节码文件,需要再由 JVM 实时解释成机器码。但这种设计也带来了跨平台的优势——同一份字节码可以在 Windows、Linux 等不同平台上被解释成对应的机器码运行,这是 Java 为了支持跨平台特性而做出的取舍。

  2. 内存管理:自动为对象、方法等分配内存,并通过自动的垃圾回收机制回收不再使用的对象,开发者无需手动管理内存。

  3. 即时编译(JIT):对热点代码进行优化,提升执行效率。由于 JVM 需要实时解释虚拟机指令,不做任何优化时性能不如直接运行机器码的 C、C++ 等语言。JVM 提供了即时编译(Just-In-Time,简称 JIT)机制,会将热点代码的字节码指令编译优化成汇编和机器码并保存至内存,下次再执行时直接调用,从而大幅提升性能。经过 JIT 优化后,Java 的运行性能可以接近 C、C++,甚至在特定场景下实现超越。

JIT 优化后性能对比

3.常见的JVM

常见的 JVM 实现包括 HotSpot、GraalVM、Eclipse OpenJ9 等,另外阿里巴巴的 Dragonwell JDK(龙井)也提供了一款功能增强版的 JVM。其中使用最广泛的是 HotSpot 虚拟机,它既是 Oracle JDK 的默认虚拟机,也是 OpenJDK 的默认虚拟机,稳定可靠、社区活跃;GraalVM 支持多语言混合编程,适合微服务、云原生架构;Dragonwell 在电商、物流、金融等对性能要求较高的领域应用较多。

常见 JVM 对比

这些 JVM 实现都遵守《Java 虚拟机规范》。该规范由 Oracle 制定,主要包含了 Java 虚拟机在设计和实现时需要遵守的规范,涵盖 class 字节码文件的定义、类和接口的加载和初始化、指令集等内容。

需要特别注意的是,《Java 虚拟机规范》是对虚拟机设计的要求,而不是对 Java 语言设计的要求。也就是说,虚拟机可以运行其他语言(如 Groovy、Scala)生成的 class 字节码文件之上。规范官网地址:Java SE 规范

4.JVM组成

JVM 主要分为四个部分:

  • 类加载器(ClassLoader):加载 class 字节码文件中的内容到内存中。
  • 运行时数据区域(即 JVM 管理的内存):负责管理 JVM 使用到的内存,比如创建对象和销毁对象。
  • 执行引擎(即时编译器、解释器、垃圾回收器等):将字节码文件中的指令解释成机器码,同时使用即时编译器优化性能。
  • 本地接口:调用本地已经编译的方法,比如虚拟机中提供的 C/C++ 的方法。

JVM 总结