JVM全称是Java Virtual Machine,中文译名Java虚拟机。本质上是一个运行在计算机上的程序
一,JVM的功能
功能 | 描述 |
---|---|
解释和运行 | 对字节码文件中的指令,实时的解释成机器码,让计算机执行 |
内存管理 | 自动为对象、方法等分配内存;自动的垃圾回收机制,回收不再使用的对象 |
即使编译(Just-In-Time简称JIT) | 对热点代码进行优化,以提升Java程序的运行性能 |
二, 常见的JVM
名称 | 作者 | 支持版本 | 特性 | 适用场景 |
---|---|---|---|---|
HotSpot(Oracle JDK版) | Oracle | 所有版本 | 适用最广泛,稳定可靠,社区活跃,JIT支持 | 闭源,Oracle JDK默认虚拟机 |
HotSpot(Open JDK版) | Oracle | 所有版本 | 适用最广泛,稳定可靠,社区活跃,JIT支持 | 开源,Open JDK默认虚拟机 |
GraalVM | Oracle | 11,17,19,企业版支持8 | 多语言支持,高性能,JIT、AOT支持 | 微服务、云原生架构需要多语言混合编程 |
Dragonwell JDK | Alibaba | 标准版支持8,11,17;扩展板支持11,17 | 基于OpenJDK的增强,高性能,bug修复,安全性提升,JWarmup、ElasticHeap、Wisp特性支持 | 电商、物流、金融领域对性能要求比较高 |
Eclipse OpenJ9 | IBM | 9,11,17,19,20 | 高性能,可扩展,JIT、AOT特性支持 | 微服务、云原生架构 |
三,JVM规范
《JVM规范》由Oracle制定,内容主要包含了JVM在设计和实现时需要遵守的规范,主要包含class字节码文件的定义、类和接口的加载和初始化、指令集等内容
Java Language and Virtual Machine Specifications
四,JVM的组成
JVM组成 | 描述 |
---|---|
类加载器ClassLoader | 获取类和接口字节码数据 |
运行时数据区域 | 负责管理JVM使用到的内存 |
执行引擎(即时编译器、解释器、垃圾回收器等) | 将字节码文件中的指令解释成机器码,同时使用即时编译器优化性能 |
本地接口 | 调用本地已经编译的方法,比如虚拟机中提供的C/C++的方法 |