JVM概述
JVM的全为 Java Virtual Machine,但是目前的 JVM 已经不再与任何语言进行深度耦合了,其本质就是运行在计算机上的程序,职责是运行处理 Java 字节码文件。
JVM 功能
解释和运行
JVM 会对字节码文件中的指令,实时的解释为机器码,在计算机上执行。
内存管理
- JVM 会自动为对象、方法等分配内存。
- JVM 的自动垃圾回收机制,会及时回收不再使用的对象,减少内存不必要的占用。
即时编译(JIT:Just In Time)
JVM 会对热点代码进行优化,可以大大提升 Java 代码的执行效率。
因为 Java 语言为了支持跨平台特性,需要进行实时解释。
一份同样的字节码文件,在Windows、Linux等不同的操作系统,会根据其环境的JDK,将字节码解释成该系统能够执行的机器码,然后才会交给底层的操作系统去执行。正因如此,如果 Java 不做任何处理,其性能不如 C、C++ 等语言。
为了解决这个问题,Java 会将热点代码字节码指令(即会被多次执行的代码片段),将其解释优化成机器码之后先保存在内存中一份,等到下一次执行的时候,就直接从内存中取出已经编译好的机器码直接使用,这样就会大大提高效率。
常见的JVM
名称 | 作者 | 支持版本 | 社区活跃度(github star) | 特性 | 适用场景 |
---|---|---|---|---|---|
HotSpot (Oracle JDK版) |
Oracle | 所有版本 | 高(闭源) | 使用最广泛,稳定可靠,社区活跃JIT支持Oracle JDK默认虚拟机 | 默认 |
HotSpot (Open JDK版) |
Oracle | 所有版本 | 中(16.1k) | 同上开源,Open JDK默认虚拟机 | 对JDK有二次开发需求 |
GraalVM | Oracle | 11,17,19企业版支持8 | 高(18.7k) | 多语言支持高性能、JIT、AOT支持 | 微服务、云原生架构需要多语言混合编程 |
Dragonwell JDK 龙井 |
Alibaba | 标准版8,11,17扩展版11,17 | 低(3.9k) | 基于OpenJDK的增强高性能、bug修复、安全性提升JWarmup、ElasticHeap、Wisp特性支持 | 电商、物流、金融领域对性能要求比较高 |
Eclipse OpenJ9 (原IBMJ9) |
IBM | 8,11,17,19,20 | 低(3.1k) | 高性能、可扩展JIT、AOT特性支持 | 微服务、云原生架构 |
JVM 的组成

- 类加载器:加载 class 字节码文件中的内容到内存中。
- 运行时数据区:负责管理 JVM 使用到的内存,例如创建对象和销毁对象时的内存管理。
- 执行引擎:将字节码文件中的指令解释为机器码,同时使用即时编译器优化性能。
- 本地接口:JVM 有的采用 C/C++ 语言进行编写,所以需要调用本地提供的已经编译的方法,这些方法并不存在于字节码文件中。