jvm類加載器介紹及其父親委托機(jī)制parentdelegation-java開發(fā)java經(jīng)驗(yàn)技巧

jvm類加載器介紹及其父親委托機(jī)制parentdelegation-java開發(fā)java經(jīng)驗(yàn)技巧

ID:31317477

大?。?9.50 KB

頁數(shù):3頁

時間:2019-01-08

jvm類加載器介紹及其父親委托機(jī)制parentdelegation-java開發(fā)java經(jīng)驗(yàn)技巧_第1頁
jvm類加載器介紹及其父親委托機(jī)制parentdelegation-java開發(fā)java經(jīng)驗(yàn)技巧_第2頁
jvm類加載器介紹及其父親委托機(jī)制parentdelegation-java開發(fā)java經(jīng)驗(yàn)技巧_第3頁
資源描述:

《jvm類加載器介紹及其父親委托機(jī)制parentdelegation-java開發(fā)java經(jīng)驗(yàn)技巧》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、JVM類加載器介紹及Jt父親委托機(jī)制PcirentDelegation-編程開發(fā)技術(shù)JVM類加載器介紹及其父親委托機(jī)制ParentDelegation原文出處:arthinking1、類加載器:類加載器用來把類加載到Java虛擬機(jī)中。從JDK1.2版木開始,類的加載過程采用父親委托機(jī)制,這種機(jī)制能更好的保證Java平臺的安全。在此委托機(jī)制中,除了Java虛擬機(jī)自帶的根類加載器Z外,其余的類加載器都有且只有一個父加載器。當(dāng)Java程序請求加載器loader1加載Sample類是,loaderl類首先委托口己的父加載器去加載Sample類,若父加載器能加載,則由父加載器完成加載任務(wù),否則才由加

2、載器loader1本身加載Sample類。2、類加載器的父親委托機(jī)制(ParentDelegation)2.1、Java虛擬機(jī)自帶了以下幾種加載器:根(Bootstrap)類加載器:該加載器沒有父加載器。它負(fù)責(zé)加載虛擬機(jī)的核心類庫,如java.lang.*等。例如java.lang.Object就是由根類加載器加載的。根類加載器從系統(tǒng)屬性sun.boot,class,path所指定的目錄中加載類庫。根類加載器的實(shí)現(xiàn)依賴于底層操作系統(tǒng),屈于虛擬機(jī)的實(shí)現(xiàn)的一部分,它并沒有繼承java.lang.ClassLoader類。擴(kuò)展(Extension)類加載器:它的父加載器為根類加載器。它從java

3、.ext.dirs系統(tǒng)屬性所指定的口錄屮加載類庫,或者從JDK的安裝口錄的jre/lib/ext子口錄(擴(kuò)展目錄)下加載類庫,如果把用戶創(chuàng)建的JAR文件放在這個目錄下,也會口動由擴(kuò)展類加載器加載。擴(kuò)展類加載器是純匕陽類,是java.lang.ClassLoader類的子類。系統(tǒng)(System)類加載器:也稱為應(yīng)用類加載器,它的父加載器為擴(kuò)展類加載器。它從環(huán)境變量classpath或者系統(tǒng)屬性java,class,path所指定的目錄中加載類,它是用戶自定義的類加載器的默認(rèn)父加載器。系統(tǒng)類加載器是純Java類,是java.lang.ClassLoader類的了類。父子加載器并非繼承關(guān)系,也就

4、是說子加載器不一定是繼承了父加載器。2.2、自定義類加載器:除了以上虛擬機(jī)口帶的加載器以外,用戶還可以定制口己的類加載器(User-definedClassLoader)。Java提供了抽象類java.lang.ClassLoader,所有用戶自定義的類加載器應(yīng)該繼承ClassLoader類。2.3、類加載器的關(guān)系:根類加載器〈-擴(kuò)展類加載器〈-系統(tǒng)類加載器〈-用戶口定義加載器在父親委托機(jī)制中,齊個加載器按照父了關(guān)系形成了樹形結(jié)構(gòu),除了根類加載器以外,其余的類加載器都冇月?只冇一個父加載器。2.4、父加載的父親委托機(jī)制:ClasssampleClass=loader2.1oadCIass(

5、"Sample");loader2首先從口己的命名空間中查找Sample類是否已經(jīng)被加載,如果已經(jīng)加載,就直接返回代表Sample類的Class對象的引用。如果Sample類還沒有被加載,loader2首先請求loader1代為加載,loader1再請求系統(tǒng)類加載器代為加載,系統(tǒng)類加載器再請求擴(kuò)展類加載器代為架了啊,擴(kuò)展類加載器在請求根類加載器代為加載。若根加載器和擴(kuò)展加載器都不能加載,則系統(tǒng)類加載器嘗試加載,若能加載成功,則將Sample類所對應(yīng)的Class對象的引用返冋給loaderl,loaderl再將引用返冋給loader2,從而成功將Sample類加載進(jìn)虛擬機(jī)。若系統(tǒng)類加載器不能

6、加載Samp1e類,貝ljloaderl嘗試加載Sample類,若laodcrl也不能成功加載,則loader2嘗試加載。若所有的父加載器及l(fā)aoder2本身都不能加載,則拋出ClassNotFoundException異常。加載器之間的父子關(guān)系實(shí)際上指的是加載器對彖之間的包裝關(guān)系,而不是類之間的繼承關(guān)系。一對父子加載器可能是同一個加載器類的兩個實(shí)例,也可能不是。在子加載器對象中包裝了一個父加載器對象ClassLoaderloaderl=newMyClassLoader();//參數(shù)loaderl將作為loader2的父加載器ClassLoaderloader2二newMyClassLoa

7、der(loaderl);2?5、定義類加載器:如果某個類加載器能夠加載一個類,那么該類加載器就稱作定義類加載器;定義類加載器及其所有子類加載器都稱作初始類加載器。假設(shè)loaderl實(shí)際加載了Sample類,則loaderl為Sample類的定義類加載器,laoder2和loaderl為Sample類的初始類加載器。ClassLoaderprotectedCJassLoacfer(ClassLoaderparent)使用

當(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)系客服處理。