IDE:IntelliJ IDEA 2022.1.3 x64
操作系统:win10 x64 位 家庭版
文章目录
- 一、JVM是什么?
- 二、JVM有哪些功能?
- 2.1 解释和运行
- 2.2 内存管理
- 2.3 即时编译
- 三、有哪些常见的JVM?
- 3.1 常见JVM
- 3.2 Java虚拟机规范
- 3.3 HotSpot的发展历程
提示:以下是本篇文章正文内容,下面案例可供参考
一、JVM是什么?
JVM的英文全称是 Java Virtual Machine,其中文译名为Java虚拟机。它在本质上就是是一个运行在计算机上的程序,他的职责是运行Java字节码文件。
JVM执行流程如下
二、JVM有哪些功能?
2.1 解释和运行
- 对字节码文件中的指令,实时解释成机器码,让计算机执行
2.2 内存管理
- 自动为对象、方法等分配内存
- 自动的垃圾回收机制,回收不再使用的对象 (相对C/C++而言,C/C++无法自动回收垃圾)
2.3 即时编译
- 对热点代码进行优化,提升执行效率
🤔什么是热点代码?
即在应用中短时间内被多次调用的代码
即时编译功能非常重要,Java语言如果不对此做优化,其性能远不如C/C++
🤔why?
👉请看如下编译对比所示
正是由于Java源代码需要先被编译生成字节码文件,而后Jvm需要实时解释字节码文件为计算机所能理解的机器码,而与此对比的C/C++ 源代码直接就可以通过编译和链接生成可执文件【机器码】,故而Java的执行性能要远低于C/C++
🤔那为何Jvm需要实时解释字节码文件?
为支持Java的跨平台性
🤔JVM如何执行即时编译功能?换而言之,它是如何做到的?
JVM在解释运行一个Java字节码文件时,会将其“翻译”成汇编语言或机器代码,特别地。它会针对其中的热点代码【字节码指令】保存到内存中,等到下次要执行该热点代码时,直接在内存中调用即可。
执行流程如下所示
正是有了即时编译【Just-In-Time 简称JIT】功能的优化性能,使得能Java可以达到接近C、C++语言的运行性能甚至在特定场景下实现超越,例如,在网络编程、多线程编程、图形界面开发等方面,Java的性能表现非常优秀。
三、有哪些常见的JVM?
3.1 常见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 (原BM9) | IBM | 8,11,17,19,20 | 低(3.1k) | 高性能、可扩展 JIT、AOT特性支持 | 微服务、云原生架构 |
3.2 Java虚拟机规范
👉释义
所谓Java虚拟机的规范,就是第三方厂家可以按照Oracle提供的JVM开发规范,针对自己的产品特点,对JVM进行二次开发
👉注意
- 《Java虚拟机规范》由Oracle制定,内容主要包含了Java虚拟机在设计和实现时需要遵守的规范,主要包含class字节码文件的定义、类和接口的加载和初始化、指令集等内容。
- 《Java虚拟机规范》是对虚拟机设计的要求,而不是对Java设计的要求,也就是说虚拟机可以运行在其他的语言比如Groovy、Scala生成的class字节码文件之上。
- 官网地址:https://docs.oracle.com/javase/specs/index.html
3.3 HotSpot的发展历程
参考资料
https://www.bilibili.com/video/BV1r94y1b7eS?p=7&spm_id_from=pageDriver&vd_source=5a34715e416a427a73a3ca52397848b5