南昌做網(wǎng)站優(yōu)化官網(wǎng)排名優(yōu)化
IDE:IntelliJ IDEA 2022.1.3 x64
操作系統(tǒng):win10 x64 位 家庭版
文章目錄
- 一、JVM是什么?
- 二、JVM有哪些功能?
- 2.1 解釋和運(yùn)行
- 2.2 內(nèi)存管理
- 2.3 即時編譯
- 三、有哪些常見的JVM?
- 3.1 常見JVM
- 3.2 Java虛擬機(jī)規(guī)范
- 3.3 HotSpot的發(fā)展歷程
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、JVM是什么?
JVM的英文全稱是 Java Virtual Machine,其中文譯名為Java虛擬機(jī)。它在本質(zhì)上就是是一個運(yùn)行在計(jì)算機(jī)上的程序,他的職責(zé)是運(yùn)行Java字節(jié)碼文件。
JVM執(zhí)行流程如下
二、JVM有哪些功能?
2.1 解釋和運(yùn)行
- 對字節(jié)碼文件中的指令,實(shí)時解釋成機(jī)器碼,讓計(jì)算機(jī)執(zhí)行
2.2 內(nèi)存管理
- 自動為對象、方法等分配內(nèi)存
- 自動的垃圾回收機(jī)制,回收不再使用的對象 (相對C/C++而言,C/C++無法自動回收垃圾)
2.3 即時編譯
- 對熱點(diǎn)代碼進(jìn)行優(yōu)化,提升執(zhí)行效率
🤔什么是熱點(diǎn)代碼?
即在應(yīng)用中短時間內(nèi)被多次調(diào)用的代碼
即時編譯功能非常重要,Java語言如果不對此做優(yōu)化,其性能遠(yuǎn)不如C/C++
🤔why?
👉請看如下編譯對比所示
正是由于Java源代碼需要先被編譯生成字節(jié)碼文件,而后Jvm需要實(shí)時解釋字節(jié)碼文件為計(jì)算機(jī)所能理解的機(jī)器碼,而與此對比的C/C++ 源代碼直接就可以通過編譯和鏈接生成可執(zhí)文件【機(jī)器碼】,故而Java的執(zhí)行性能要遠(yuǎn)低于C/C++
🤔那為何Jvm需要實(shí)時解釋字節(jié)碼文件?
為支持Java的跨平臺性
🤔JVM如何執(zhí)行即時編譯功能?換而言之,它是如何做到的?
JVM在解釋運(yùn)行一個Java字節(jié)碼文件時,會將其“翻譯”成匯編語言或機(jī)器代碼,特別地。它會針對其中的熱點(diǎn)代碼【字節(jié)碼指令】保存到內(nèi)存中,等到下次要執(zhí)行該熱點(diǎn)代碼時,直接在內(nèi)存中調(diào)用即可。
執(zhí)行流程如下所示
正是有了即時編譯【Just-In-Time 簡稱JIT】功能的優(yōu)化性能,使得能Java可以達(dá)到接近C、C++語言的運(yùn)行性能甚至在特定場景下實(shí)現(xiàn)超越,例如,在網(wǎng)絡(luò)編程、多線程編程、圖形界面開發(fā)等方面,Java的性能表現(xiàn)非常優(yōu)秀。
三、有哪些常見的JVM?
3.1 常見JVM
名稱 | 作者 | 支持版本 | 社區(qū)活躍度(github star) | 特性 | 適用場景 |
---|---|---|---|---|---|
HotSpot (Oracle JDK版) | Oracle | 所有版本 | 高(閉源) | 使用最廣泛,穩(wěn)定可靠,社區(qū)活躍 JIT支持 Oracle JDK默認(rèn)虛擬機(jī) | 默認(rèn) |
HotSpot (Open JDK版) | Oracle | 所有版本 | 中(16.1k) | 同上 開源,Open JDK默認(rèn)虛擬機(jī) | 默認(rèn) 對JDK有二次開發(fā)需求 |
GraalVM | Oracle | 11,17,19 企業(yè)版支持8 | 高(18.7k) | 多語言支持 高性能、JIT、AOT支特 | 微服務(wù)、云原生架構(gòu) 需要多語言混合編程 |
Dragonwell JDK 龍井 | Alibaba | 標(biāo)準(zhǔn)版8,11,17 擴(kuò)展版11,17 | 低(3.9k) | 基于OpenJDK的增強(qiáng) 高性能、bug修復(fù)、安全性提升 JWarmup、ElasticHeap、Wisp特性支持 | 電商、物流、金融領(lǐng)域 對性能要求比較高 |
Eclipse OpenJ9 (原BM9) | IBM | 8,11,17,19,20 | 低(3.1k) | 高性能、可擴(kuò)展 JIT、AOT特性支持 | 微服務(wù)、云原生架構(gòu) |
3.2 Java虛擬機(jī)規(guī)范
👉釋義
所謂Java虛擬機(jī)的規(guī)范,就是第三方廠家可以按照Oracle提供的JVM開發(fā)規(guī)范,針對自己的產(chǎn)品特點(diǎn),對JVM進(jìn)行二次開發(fā)
👉注意
- 《Java虛擬機(jī)規(guī)范》由Oracle制定,內(nèi)容主要包含了Java虛擬機(jī)在設(shè)計(jì)和實(shí)現(xiàn)時需要遵守的規(guī)范,主要包含class字節(jié)碼文件的定義、類和接口的加載和初始化、指令集等內(nèi)容。
- 《Java虛擬機(jī)規(guī)范》是對虛擬機(jī)設(shè)計(jì)的要求,而不是對Java設(shè)計(jì)的要求,也就是說虛擬機(jī)可以運(yùn)行在其他的語言比如Groovy、Scala生成的class字節(jié)碼文件之上。
- 官網(wǎng)地址:https://docs.oracle.com/javase/specs/index.html
3.3 HotSpot的發(fā)展歷程
參考資料
https://www.bilibili.com/video/BV1r94y1b7eS?p=7&spm_id_from=pageDriver&vd_source=5a34715e416a427a73a3ca52397848b5