真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JVM的體系結(jié)構(gòu)是什么

JVM的體系結(jié)構(gòu)是什么,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)是一家專業(yè)提供羅莊企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、H5頁面制作、小程序制作等業(yè)務(wù)。10年已為羅莊眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

什么是JVM呢?

虛擬機(jī)是物理機(jī)的軟件實(shí)現(xiàn)。Java是用WORA(編寫一次運(yùn)行到任何地方)的概念開發(fā)的,它在VM上運(yùn)行。編譯器將Java文件編譯成Java .class文件,然后將.class文件輸入JVM, JVM加載并執(zhí)行類文件。下面是JVM的架構(gòu)圖。

JVM的體系結(jié)構(gòu)是什么

JVM是如何工作的?

如圖所示,JVM分為三個(gè)主要子系統(tǒng):

  1. 類加載器子系統(tǒng)

  2. 運(yùn)行時(shí)數(shù)據(jù)區(qū)

  3. 執(zhí)行引擎

1. 類加載器子系統(tǒng)

Java的動(dòng)態(tài)類加載功能由類加載器子系統(tǒng)處理。它裝載的鏈接。在運(yùn)行時(shí)而不是編譯時(shí)首次引用類時(shí)初始化類文件。

1.1 加載

類將由該組件加載。引導(dǎo)類加載器、擴(kuò)展類加載器和應(yīng)用程序類加載器是有助于實(shí)現(xiàn)這一目標(biāo)的三個(gè)類加載器。

  1. 引導(dǎo)類加載器– 負(fù)責(zé)從引導(dǎo)類路徑加載類,除了rt.jar什么也沒有。這個(gè)加載程序?qū)@得最高優(yōu)先級(jí)。

  2. 擴(kuò)展類加載器– 負(fù)責(zé)加載ext文件夾**(jre\lib)**中的類。

  3. 應(yīng)用程序類加載器–負(fù)責(zé)加載應(yīng)用程序級(jí)類路徑、所述環(huán)境變量的路徑等。

上述類加載器在加載類文件時(shí)將遵循委托層次結(jié)構(gòu)算法。

1.2 鏈接
  1. 驗(yàn)證– 字節(jié)碼驗(yàn)證器將驗(yàn)證生成的字節(jié)碼是否正確,如果驗(yàn)證失敗,我們將得到驗(yàn)證錯(cuò)誤。

  2. 準(zhǔn)備– 內(nèi)存將為所有靜態(tài)變量分配默認(rèn)值。

  3. 解析– 所有符號(hào)內(nèi)存引用將被來自方法區(qū)域的原始引用所替換。

1.3 初始化

這是類加載的最后階段;在這里,所有靜態(tài)變量都將被賦初始值,并且靜態(tài)塊也會(huì)被執(zhí)行。

2. 運(yùn)行時(shí)數(shù)據(jù)區(qū)

運(yùn)行時(shí)數(shù)據(jù)區(qū)被分為五個(gè)主要組件:

  1. 方法區(qū)– 所有類級(jí)數(shù)據(jù)都將存儲(chǔ)在這里,包括靜態(tài)變量。每個(gè)JVM只有一個(gè)方法區(qū),它是資源共享的。

  2. –所有對(duì)象及其對(duì)應(yīng)的實(shí)例變量和數(shù)組都將存儲(chǔ)在這里。每個(gè)JVM也僅有一個(gè)堆。由于方法區(qū)和堆被多個(gè)線程共享內(nèi)存,因此存儲(chǔ)的數(shù)據(jù)不是線程安全的。

  3. –每個(gè)線程將創(chuàng)建一個(gè)單獨(dú)的運(yùn)行時(shí)棧。每個(gè)方法調(diào)用都會(huì)在棧內(nèi)存中生成一個(gè)條目,稱為棧幀。所有本地變量都將在棧內(nèi)存中創(chuàng)建。棧區(qū)域是線程安全的,因?yàn)樗皇莾?nèi)存共享的。

    棧區(qū)域被分為三個(gè)部分:

    1. 局部變量數(shù)組– 與方法相關(guān),涉及到局部變量以及相應(yīng)的值都將存儲(chǔ)在這里。

    2. 操作數(shù)堆棧–如果需要執(zhí)行任何中間操作,操作數(shù)堆棧充當(dāng)運(yùn)行時(shí)工作區(qū)來執(zhí)行操作。

    3. 幀數(shù)據(jù)– 所有與方法對(duì)應(yīng)的符號(hào)都存儲(chǔ)在這里。在任何異常情況下,catch塊信息都將保存在幀數(shù)據(jù)中。

  4. PC寄存器– 每個(gè)線程將有單獨(dú)的PC寄存器,以保持當(dāng)前執(zhí)行指令的地址一旦指令執(zhí)行,PC寄存器能順利地更新到下一條指令。

  5. 本地方法棧– 本機(jī)方法棧保存著本地方法信息。對(duì)于每個(gè)線程,都將創(chuàng)建一個(gè)單獨(dú)的本機(jī)方法棧。

3. 執(zhí)行引擎

被分配給運(yùn)行時(shí)數(shù)據(jù)區(qū)的字節(jié)碼將由執(zhí)行引擎執(zhí)行。執(zhí)行引擎讀取字節(jié)碼并逐個(gè)執(zhí)行。

  1. 解釋器– 解釋器更快地解釋字節(jié)碼,但執(zhí)行速度很慢。解釋器的缺點(diǎn)是,當(dāng)一個(gè)方法被多次調(diào)用時(shí),每次都需要一個(gè)新的解釋。

  2. JIT編譯器

    – JIT編譯器消除了解釋器的缺點(diǎn)。執(zhí)行引擎將在轉(zhuǎn)換字節(jié)碼時(shí)使用解釋器的幫助,但是當(dāng)它發(fā)現(xiàn)重復(fù)的代碼時(shí),它使用JIT編譯器,JIT編譯整個(gè)字節(jié)碼并將其更改為本機(jī)代碼。此本機(jī)代碼將直接用于重復(fù)的方法調(diào)用,從而提高系統(tǒng)的性能。

    1. 中間代碼生成器– 生成中間代碼

    2. 代碼優(yōu)化器– 負(fù)責(zé)優(yōu)化上面生成的中間代碼

    3. 目標(biāo)代碼生成器– 負(fù)責(zé)生成機(jī)器代碼或本地代碼

    4. 分析器– 一個(gè)特殊的組件,負(fù)責(zé)尋找熱點(diǎn),即方法是否被多次調(diào)用。

  3. 垃圾收集器:收集和刪除未引用的對(duì)象??梢酝ㄟ^調(diào)用 System.gc()觸發(fā)垃圾收集,但不能保證執(zhí)行。JVM的垃圾收集收集創(chuàng)建的對(duì)象。

Java本地接口(JNI): JNI將與本地方法庫交互,并提供執(zhí)行引擎所需的本地庫。

本機(jī)方法庫: 這是執(zhí)行引擎所需的本機(jī)庫的集合。

看完上述內(nèi)容,你們掌握J(rèn)VM的體系結(jié)構(gòu)是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


當(dāng)前標(biāo)題:JVM的體系結(jié)構(gòu)是什么
文章轉(zhuǎn)載:http://weahome.cn/article/gijgjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部