更新時間:2021年10月22日10時04分 來源:傳智教育 瀏覽次數(shù):
JVM虛擬機(jī)的組成
所謂java能實(shí)現(xiàn)跨平臺,是因?yàn)樵诓煌脚_上運(yùn)行不同的虛擬機(jī)決定的,因此java文件的執(zhí)行不直接在操作系統(tǒng)上執(zhí)行,而是通過jvm虛擬機(jī)執(zhí)行,我們可以從這張圖看到,JVM并沒有直接與硬件打交道,而是與操作系統(tǒng)交互用以執(zhí)行java程序。
下面張圖是jvm的組成圖,分為四部分:
類加載器
類加載器的作用是加載類文件到內(nèi)存。比如我們寫一個HelloWorld.java的程序,首先使用javac命令進(jìn)行編譯,生成HelloWorld.java的字節(jié)碼文件,怎樣才能執(zhí)行.class文件呢。就需要用藥類加載器將字節(jié)碼文件加載到內(nèi)存中,然后通過jvm后續(xù)的模塊進(jìn)行加載執(zhí)行程序。ClassLoader只管加載,至于是否能夠執(zhí)行,則不屬于它的負(fù)責(zé)范圍,由執(zhí)行引擎負(fù)責(zé)。
執(zhí)行引擎
執(zhí)行引擎也叫解釋器,負(fù)責(zé)解釋命令,提交操作系統(tǒng)執(zhí)行
本地接口
本地接口的作用是融合不同的編程語言為Java所用,它的初衷是融合C/C++程序,Java誕生的時候是C/C++橫行的時候,要想立足,必須有一個聰明的、睿智的調(diào)用C/C++程序,于是就在內(nèi)存中專門開辟了一塊區(qū)域處理標(biāo)記為native的代碼,它的具體做法是Native Method Stack中登記native方法,在Execution Engine執(zhí)行時加載native libraies。目前該方法使用的是越來越少了,除非是與硬件有關(guān)的應(yīng)用,比如通過Java程序驅(qū)動打印機(jī),或者Java系統(tǒng)管理生產(chǎn)設(shè)備,在企業(yè)級應(yīng)用中已經(jīng)比較少見,因?yàn)楝F(xiàn)在的異構(gòu)領(lǐng)域間的通信很發(fā)達(dá),比如可以使用Socket通信,也可以使用Web Service等等,不多做介紹。
運(yùn)行時數(shù)據(jù)區(qū)
運(yùn)行數(shù)據(jù)區(qū)是整個JVM的重點(diǎn)。我們所有寫的程序都被加載到這里,之后才開始運(yùn)行,Java生態(tài)系統(tǒng)如此的繁榮,得益于該區(qū)域的優(yōu)良自治。整個JVM框架由加載器加載文件,然后執(zhí)行器在內(nèi)存中處理數(shù)據(jù),需要與異構(gòu)系統(tǒng)交互是可以通過本地接口進(jìn)行!
添加QQ(注意~~添加好友界面,選擇找人):435946716,【免費(fèi)】獲取《JVM核心教程:JVM從門到精通_JVM虛擬機(jī)底層原理深入教程》全套視頻教程+配套資料。
猜你喜歡