java虛擬機(jī)結(jié)構(gòu)分析-編程開發(fā)技術(shù)

java虛擬機(jī)結(jié)構(gòu)分析-編程開發(fā)技術(shù)

ID:30779108

大?。?35.54 KB

頁數(shù):8頁

時間:2019-01-03

java虛擬機(jī)結(jié)構(gòu)分析-編程開發(fā)技術(shù)_第1頁
java虛擬機(jī)結(jié)構(gòu)分析-編程開發(fā)技術(shù)_第2頁
java虛擬機(jī)結(jié)構(gòu)分析-編程開發(fā)技術(shù)_第3頁
java虛擬機(jī)結(jié)構(gòu)分析-編程開發(fā)技術(shù)_第4頁
java虛擬機(jī)結(jié)構(gòu)分析-編程開發(fā)技術(shù)_第5頁
資源描述:

《java虛擬機(jī)結(jié)構(gòu)分析-編程開發(fā)技術(shù)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、hva虛擬機(jī)結(jié)構(gòu)分析?編程開發(fā)技術(shù)Java虛擬機(jī)結(jié)構(gòu)分析原文出處:朱小廝本博文主要介紹了JVM(Java?VirtualMachine)的組成部分以及它們內(nèi)部的工作機(jī)制和原理。需要注意的是,雖然平時我們用的大多是Sim(現(xiàn)已被Oracle收購)JDK捉供的JVM,但是JVM本身是一個規(guī)范,所以可以冇多種實(shí)現(xiàn),除了Hotspot外,還有諸$0Oracle的JRockit、IBM的J9也都是非常有名的JVM。1.結(jié)構(gòu)卜?圖展示了JVM的主要結(jié)構(gòu):CLASSLOADERCLASSFILESNZVTIVELIBRARIESEXECUTIONENGIN

2、ENATIVE[NTERECE

3、

4、RUNTIMEDATAAREASSHAREDAMONGALLTHREADS

5、

6、THREADSPEQFICRUNTIMEDATAAREAS可以看出,JVM主要由類加載器子系統(tǒng)、運(yùn)行時數(shù)據(jù)區(qū)(內(nèi)存空間)、執(zhí)行引擎以及與本地方法接口等組成。其中運(yùn)行時數(shù)據(jù)區(qū)又由方法區(qū)、堆、Java棧、PC寄存器、本地方法棧組成。從上圖屮還可以看岀,在內(nèi)存空間中方法區(qū)和堆是所有Java線程共享的,而Java棧、本地方法棧、PC寄存器則由每個線程私有,這會引出一些問題,后文會進(jìn)行具體討論。眾所周知,Jova語言具有跨平臺的特性,這也是由

7、JVM來實(shí)現(xiàn)的。更準(zhǔn)確地說,是Sun利用JVM在不同平臺上的實(shí)現(xiàn)幫我們把平臺相關(guān)性的問題給解決了,這就好比是HTML語言可以在不同廠商的瀏覽器上呈現(xiàn)元素(雖然某些瀏覽器在對W3C標(biāo)準(zhǔn)的支持上還冇一些問題)。同時,Java語言支持通過JN1(JavaNativeInterface)來實(shí)現(xiàn)本地方法的調(diào)用,但是需要注意到,如果你在Java程序用調(diào)用了木地方法,那么你的程序就很可能不再具有跨平臺性,即木地方法會破壞平臺無關(guān)性。2?類加載器子系統(tǒng)(ClassLoader)類加載器子系統(tǒng)負(fù)責(zé)加載編譯好的.class字節(jié)碼文件,并裝入內(nèi)存,使JVM可以實(shí)例

8、化或以其它方式使用加載后的類。JVM的類加載子系統(tǒng)支持在運(yùn)行時的動態(tài)加載,動態(tài)加載的優(yōu)點(diǎn)有很多,例如可以節(jié)省內(nèi)存空間、靈活地從網(wǎng)絡(luò)上加載類,動態(tài)加載的另一好處是可以通過命名空間的分隔來實(shí)現(xiàn)類的隔離,增強(qiáng)了整個系統(tǒng)的安全性。2.1ClassLoader的分類?啟動類加載器(BootstrapClassLoader):負(fù)責(zé)加載rt.jai?文件中所有的Java類,即Java的核心類都是由該ClassLoader加載。在SunJDK中,這個類加載器是由C++實(shí)現(xiàn)的,并且在Java語言屮無法獲得它的引用。?擴(kuò)展類加載器(ExtensionClassL

9、oader):負(fù)責(zé)加載一些擴(kuò)展功能的jar包。?系統(tǒng)類加載器(SystemClassLoader):負(fù)責(zé)加載啟動參數(shù)中指定的Classpath中的jar包及目錄,通常我們自己寫的Java類也是由該ClassLoader加載。在SunJDK中,系統(tǒng)類加載器的名字叫AppClassLoader。?用戶自定義類加載器(UserDefinedClassLoader):由用八B定義類的加載規(guī)貝U,可以手動控制加載過程中的步驟。2.2ClassLoader的工作原理類加載分為裝載、鏈接、初始化三步。2.2.1裝載通過類的全限定名和ClassLoader加

10、載類,主要是將指定的.class文件加載至JVMo當(dāng)類被加載以后,在JVM內(nèi)部就以“類的全限定名+ClassLoader實(shí)例ID”來標(biāo)明類。在內(nèi)存中,ClassLoader實(shí)例和類的實(shí)例都位于堆中,它們的類信息都位于方法區(qū)。裝載過程采用了一種被稱為“雙親委派模型(ParentDelegationModel)的方式,當(dāng)一個ClassLoader要加載類時,它會先請求它的雙親ClassLoader(其實(shí)這里只有兩個ClassLoader,所以稱為父ClassLoader可能更容易理解)加載類,而它的雙親ClassLoader會繼續(xù)把加載請求提交再

11、上一級的ClassLoader,直到啟動類加載器。只冇英雙親ClassLoader無法加載指定的類時,它才會自己加載類。雙親委派模型是JVM的第一道安全防線,它保證了類的安全加載,這里同吋依賴了類加載器隔離的原理:不同類加載器加載的類之間是無法直接交互的,即使是同一個類,被不同的ClassLoader加載,它們也無法感知到彼此的存在。這樣即使有惡意的類冒充自己在核心包(例如java,lang)下,由于它無法被啟動類加載器加載,也造成不了危害。由此也可見,如果用戶自定義了類加載器,那就必須自己保障類加載過程中的安全。2.2.2鏈接鏈接的任務(wù)是把

12、二進(jìn)制的類型信息合并到JVM運(yùn)行時狀態(tài)屮去。鏈接分為以下三步:1.驗(yàn)證:校驗(yàn).class文件的正確性,確保該文件是符合規(guī)范定義的,并H適合當(dāng)前JVM使用。2.準(zhǔn)備:

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。