jvm(Java virtual machine) JVM架构解释
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
JVM 架構(gòu)解釋
每個(gè)Java開發(fā)者都知道通過JRE【Java運(yùn)行環(huán)境】執(zhí)行字節(jié)碼。
但是很多人都不知道JRE是JVM實(shí)現(xiàn)的事實(shí)。JVM負(fù)責(zé)執(zhí)行字節(jié)碼的分析
代碼的解釋和運(yùn)行。
我們應(yīng)該了解JVM的架構(gòu),這對(duì)開發(fā)者來說是很重要的,這促進(jìn)我們更有效的
編寫代碼。在本文中,我們將深入學(xué)習(xí)有關(guān)JVM的架構(gòu)和JVM組件的區(qū)別。
什么是JVM?
虛擬機(jī)是物理機(jī)的一個(gè)軟件實(shí)現(xiàn)。
JAVA是基于WORA(一次編寫,到處運(yùn)行)的概念開發(fā)的,它運(yùn)行在虛擬機(jī)上。
編譯器將Java文件編譯成class文件,然后將class文件輸入到JVM,JVM加載并運(yùn)行class文件。
下面是JVM架構(gòu)圖:
JVM是如何工作的?
像上面圖表顯示那樣,JVM分成3個(gè)主要的子系統(tǒng):
?
1、類加載器子系統(tǒng)
Java的動(dòng)態(tài)類加載功能是通過類加載子系統(tǒng)去處理的。
它并不是在編譯時(shí)候,而是在首次運(yùn)行時(shí)加載引用類時(shí)、連接并初始化類文件。
?
1.1 加載
類通過該組件加載。通過引導(dǎo)類加載器,擴(kuò)展類加載器,應(yīng)用類加載器這三個(gè)類加載器幫助完成加載。
負(fù)責(zé)從引導(dǎo)類路徑去加載類,除了rt.jar之外,沒其他別的jar。給予該加載器最高的優(yōu)先級(jí)。
負(fù)責(zé)加載ext目錄(jre\lib)的類
負(fù)責(zé)加載類路徑中應(yīng)用級(jí)別的類,path提到的環(huán)境變量,等等。
以上的類加載器在加載類文件的時(shí)候遵循委托層次算法。
1.2連接
?
1.3 初始化
這是類加載的最后一個(gè)階段,此時(shí)所有的靜態(tài)變量都用原始值去賦值,并且將運(yùn)行靜態(tài)代碼塊。
2、運(yùn)行時(shí)數(shù)據(jù)區(qū)
運(yùn)行時(shí)數(shù)據(jù)區(qū)域分成5個(gè)主要的組件:
每個(gè)JVM只有一個(gè)方法區(qū),它是一個(gè)共享資源。
每個(gè)JVM只有一個(gè)堆區(qū),由于方法區(qū)和堆區(qū)為多個(gè)線程共享內(nèi)存,所以
存儲(chǔ)的數(shù)據(jù)不是線程安全的。
棧幀被分成3子實(shí)體
3、執(zhí)行引擎
字節(jié)碼被分配到執(zhí)行引擎執(zhí)行的運(yùn)行時(shí)數(shù)據(jù)區(qū)。執(zhí)行引擎一塊一塊的讀取字節(jié)碼并執(zhí)行。
這些本地碼將直接被方法調(diào)用重復(fù)地使用,這就改善了系統(tǒng)的性能。
?
?
Java Native Interface (JNI):JNI和本地方法庫互動(dòng),特供本地庫所需的執(zhí)行引擎。
Native Method Libraries: 這是執(zhí)行引擎所需的本地方法的一個(gè)集合
?
本文為在下翻譯外文的處女作,水平有限,翻譯不恰當(dāng)之處,煩請讀者指正!
原文地址:https://dzone.com/articles/jvm-architecture-explained
?
轉(zhuǎn)載于:https://my.oschina.net/benz001/blog/2990014
總結(jié)
以上是生活随笔為你收集整理的jvm(Java virtual machine) JVM架构解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Mobx 与 Redux 的性能对比
 - 下一篇: 905. 按奇偶排序数组