Java虛擬機(jī)(JVM)用于Java運(yùn)行時環(huán)境(JRE)。最初的JVM被設(shè)想為字節(jié)碼解釋器。由于性能問題,這可能有點(diǎn)出人意料。許多現(xiàn)代語言都要編譯成CPU專用的可執(zhí)行代碼。然而,JVM執(zhí)行Java程序這一事實(shí)有助于解決與基于web的應(yīng)用程序相關(guān)的主要問題。想對JVM有更多了解,建議考慮報名參加Java培訓(xùn),有明確的學(xué)習(xí)路線和全面系統(tǒng)的課程,能獲得較快提升。
JVM執(zhí)行Java程序這一事實(shí)也有助于使其穩(wěn)定。由于JVM負(fù)責(zé),程序的執(zhí)行由它控制。因此,JVM可以構(gòu)建一個稱為沙盒的有限執(zhí)行區(qū)域,其中包含軟件,從而防止系統(tǒng)獲得無限訪問。Java語言中存在的一些限制也改善了保護(hù)。Java的JVM架構(gòu)包括類加載器、執(zhí)行引擎、內(nèi)存字段等。
為了理解差異,讓我們通過說明JVM的工作來深入了解組件。
類加載器:類加載器的目的是加載類文件。它有助于完成三個主要功能:加載、初始化和鏈接。
JVM語言堆棧:Java內(nèi)存存儲本地變量和計算的部分結(jié)果。每個線程都有自己的JVM堆棧,在創(chuàng)建線程時創(chuàng)建。調(diào)用該方法時,將創(chuàng)建一個新框架,然后將其刪除。在java培訓(xùn)中,也有關(guān)于JVM內(nèi)存的學(xué)習(xí),學(xué)好這部分的知識,可以避免在工作中出現(xiàn)的很多問題。
方法區(qū):JVM方法區(qū)專門存儲Java應(yīng)用程序的元數(shù)據(jù)和代碼隱藏文件。
PC寄存器:當(dāng)前正在執(zhí)行的Java虛擬機(jī)指令地址由PC寄存器保存。Java中的每個線程都有自己獨(dú)立的PC寄存器。
堆:堆中保存了所有對象、數(shù)組和實(shí)例變量。此內(nèi)存在多個線程之間共享。
執(zhí)行引擎:它是一種用于測試軟件、硬件或完整系統(tǒng)的軟件形式。測試執(zhí)行引擎從不攜帶任何有關(guān)被測試產(chǎn)品的信息。
本地方法庫:作為執(zhí)行引擎的本地方法庫需要本地庫(C,C++),而作為編程框架的本地方法接口是本地方法接口。這使得在JVM中運(yùn)行的Java代碼能夠調(diào)用庫和本機(jī)應(yīng)用程序。此外,本機(jī)方法堆棧根據(jù)本機(jī)庫具有本機(jī)代碼命令。它將存儲分配給本機(jī)堆或使用任何堆棧類型。參加java培訓(xùn),可以學(xué)到全方位的java知識和技能,而且還有實(shí)戰(zhàn)項(xiàng)目操作訓(xùn)練,積累項(xiàng)目經(jīng)驗(yàn),以便快速上崗。
實(shí)時(JIT)編譯器
雖然Java是作為一種解釋語言開發(fā)的,但為了提高性能,Java并沒有阻止字節(jié)碼編譯為本地代碼。因此,在Java首次發(fā)布后不久,HotSpotJVM就發(fā)布了。HotSpot中包含一個即時(JIT)字節(jié)碼編譯器。實(shí)時(JIT)編譯器是JVM的一部分,在逐件需求的基礎(chǔ)上,字節(jié)碼的選定部分被實(shí)時編譯為可執(zhí)行代碼。也就是說,正如在執(zhí)行期間所必需的,JIT編譯器編譯代碼。此外,并非所有字節(jié)碼序列都被編譯,只有那些將從編譯中受益的字節(jié)碼序列才被編譯。然而,及時的方法仍然大大提高了效率。即使動態(tài)編譯應(yīng)用于字節(jié)碼,可移植性和安全性功能仍然存在,因?yàn)?/span>JVM仍然控制執(zhí)行環(huán)境。
為了理解差異,讓我們通過說明JIT的工作方式來深入了解組件。
通過解釋字節(jié)碼,JVM的標(biāo)準(zhǔn)實(shí)現(xiàn)降低了程序的執(zhí)行速度。JIT編譯器在運(yùn)行時與JVM交互以提高性能,并將適當(dāng)?shù)淖止?jié)碼序列編譯成本機(jī)代碼。
硬件正在解釋代碼,而不是JVM(Java虛擬機(jī))。這可以提高執(zhí)行速度的性能。這可以在每個文件、每個函數(shù)或任何任意代碼片段上完成;代碼通常在接近執(zhí)行時進(jìn)行編譯(因此稱為“及時”),然后緩存并在以后重用,而無需重新編譯。它執(zhí)行許多優(yōu)化:數(shù)據(jù)分析、從堆棧操作轉(zhuǎn)換為注冊表操作、通過注冊表分配減少內(nèi)存訪問、消除常見子表達(dá)式。若想要更加系統(tǒng)更加詳細(xì)的學(xué)習(xí) JVM 知識,建議參加java培訓(xùn),有經(jīng)驗(yàn)豐富的專業(yè)講師面授指導(dǎo)教學(xué),能夠幫你更全面了解JVM。