JVM

首先會(huì)把java編譯成為字節(jié)碼。然后通過(guò)類加載器加載字節(jié)碼。

JVM加載 雙親委任模型:

java在加載一個(gè)類的時(shí)候,會(huì)首先判斷是否這個(gè)類已經(jīng)被加載了,如果被加載了就會(huì)直接返回,如果沒(méi)有被加載,則會(huì)使用一個(gè)互斥鎖,開(kāi)始對(duì)類進(jìn)行加載,在加載的時(shí)候,會(huì)遞歸的調(diào)用parent.loadclass 就是一直到最后上層(boostraploader)看最上層能不能夠加載該類,如果最上層能夠加載,那么這一層的加載器就不會(huì)加載類,如果上層加載器不能加載,上層會(huì)拋出異常,這樣這一層才會(huì)使用自己的加載方法,這樣的一個(gè)好處就是,例如我們?cè)谌绻麑?xiě)了一個(gè)本地list類,就不會(huì)被成功加載,因?yàn)樯蠈蛹虞d器已經(jīng)加載了一個(gè)同樣名稱的類,這樣就會(huì)報(bào)錯(cuò),這樣的好處就是,我們可以實(shí)現(xiàn)類加載的安全性隔離。(類加載器只會(huì)加載指定路徑下的類,所以如果我們想加載一個(gè)和系統(tǒng)類同名的類,我們可以自己寫(xiě)一個(gè)類加載器,并且把需要加載的類放到別的路徑當(dāng)中)


image.png

JVM的組成

虛擬機(jī)棧:
本地方法棧:包含八大基礎(chǔ)類型和一個(gè)引用類型
堆:用于存放new出來(lái)的對(duì)象
方法區(qū):類信息(一個(gè)類的名字及類中包含的方法) 常量(final) 靜態(tài)變量(static) JIT編譯后的代碼(經(jīng)常使用的代碼,類似于緩存熱點(diǎn)代碼)
程序計(jì)數(shù)器:


image.png

image.png

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇文章是我之前翻閱了不少的書(shū)籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方,同時(shí)不同JDK版本的...
    高廣超閱讀 16,051評(píng)論 3 83
  • 每個(gè)使用Java的開(kāi)發(fā)者都知道Java字節(jié)碼是在JRE中運(yùn)行(JRE: Java 運(yùn)行時(shí)環(huán)境)。JVM則是JRE中...
    燕京博士閱讀 1,650評(píng)論 0 6
  • 前言 寫(xiě)這篇文章的目的: 總結(jié)所學(xué)的 JVM 知識(shí) 幫助想了解 JVM 的朋友,知無(wú)不言,言無(wú)不盡 本篇文章將會(huì)介...
    SavySoda閱讀 5,228評(píng)論 11 105
  • 這篇文章解釋了Java 虛擬機(jī)(JVM)的內(nèi)部架構(gòu)。下圖顯示了遵守Java SE 7 規(guī)范的典型的 JVM 核心內(nèi)...
    飲墨饗書(shū)閱讀 1,157評(píng)論 0 1
  • 編譯地址: jamesdbloom譯者: ImportNew.com - 挖坑的張師傅原文地址: http://w...
    IT程序獅閱讀 2,684評(píng)論 1 26

友情鏈接更多精彩內(nèi)容