深入剖析JVM虛擬機(jī)的內(nèi)部結(jié)構(gòu)
這里向大家描述一下JVM虛擬機(jī)的內(nèi)部結(jié)構(gòu),JVM主要分為6個(gè)部分,包括JVM解釋器,寄存器,JVM棧,存儲(chǔ)區(qū)和碎片回收區(qū),相信本文介紹一定會(huì)讓你有所收獲。
JVM虛擬機(jī)的內(nèi)部結(jié)構(gòu)
JVM虛擬機(jī)是Java平臺(tái)的核心, 為了讓編譯產(chǎn)生的字節(jié)碼能夠更好的解釋和執(zhí)行,JVM主要分為6個(gè)部分【這里只是帶過(guò),想要了解JVM整體執(zhí)行原理的讀者可以去參考《Inside JVM》】:
JVM解釋器:即這個(gè)虛擬機(jī)處理字段碼的 CPU。
JVM指令系統(tǒng):該系統(tǒng)與計(jì)算機(jī)很相似,一條指 令由操作碼和操作數(shù)兩部分組成。操作碼為8位二進(jìn)制數(shù),主要是為了說(shuō)明一條指令的功能,操作數(shù)可以根據(jù)需要而定,JVM虛擬機(jī)有多達(dá)256種不同的操作指令。
寄存器:JVM有自己的虛擬寄存器,這樣就可以 快速地與JVM的解釋器進(jìn)行數(shù)據(jù)交換。為了功能的需要,JVM虛擬機(jī)設(shè)置了4個(gè)常用的32位寄存器:pc(程序計(jì)數(shù)器)、 optop(操作數(shù)棧頂指針)、frame(當(dāng)前執(zhí)行環(huán)境指針)和vars(指向當(dāng)前執(zhí)行環(huán)境中***個(gè)局部變量的指針)。
JVM棧:指令執(zhí)行時(shí)數(shù)據(jù)和信息存儲(chǔ)的場(chǎng)所和控 制中心,它提供給JVM解釋器運(yùn)算所需要的信息。
存儲(chǔ)區(qū):JVM存儲(chǔ)區(qū)用于存儲(chǔ)編譯過(guò)后的字節(jié)碼 等信息。
碎片回收區(qū):JVM碎片回收是指將使用過(guò)的 Java類(lèi)的具體實(shí)例從內(nèi)存進(jìn)行回收,這就使得開(kāi)發(fā)人員免去了自己編程控制內(nèi)存的麻煩和危險(xiǎn)。隨著JVM的不斷升級(jí),其碎片回收的技術(shù)和算法也更加合理。 JVM 1.4.1版后產(chǎn)生了一種叫分代收集技術(shù),簡(jiǎn)單來(lái)說(shuō)就是利用對(duì)象在程序中生存的時(shí)間劃分成代,以此為標(biāo)準(zhǔn)進(jìn)行碎片回收。
【編輯推薦】
- 設(shè)置TOMCAT的JVM虛擬機(jī)內(nèi)存大小
- JVM、JRE、JDK的區(qū)別和聯(lián)系
- 探索Java工作原理之JVM內(nèi)存回收
- 實(shí)例解析Linux平臺(tái)的JVM性能評(píng)測(cè)
- 深入JVM:ClassLoader相關(guān)知識(shí)簡(jiǎn)介