一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java ClassLoader基礎(chǔ)知識(網(wǎng)上內(nèi)容整理后所得)

 yandao1117 2011-09-01
 
    Java中一共有四個類加載器,之所以叫類加載器,是程序要用到某個類的時候,要用類加載器載入內(nèi)存。
    這四個類加載器分別為:Bootstrap ClassLoader、Extension ClassLoader、AppClassLoader
URLClassLoader,他們的作用其實從名字就可以大概推測出來了。其中AppClassLoader在很多地方被叫做System ClassLoader

Bootstrap ClassLoader是在JVM開始運行的時候加載java的核心類,是用C++編寫的,它用來加載核心類庫,在JVM源代碼中這樣寫道:
static const char classpathFormat[] =
"%/lib/rt.jar:"
"%/lib/i18n.jar:"
"%/lib/sunrsasign.jar:"
"%/lib/jsse.jar:"
"%/lib/jce.jar:"
"%/lib/charsets.jar:"
"%/classes";
Extension ClassLoader是用來加載擴展類,即/lib/ext中的類。
AppClassLoader用來加載Classpath的類,是和我們關(guān)系最密切的類。
URLClassLoader用來加載網(wǎng)絡(luò)上遠程的類,暫且不討論。

它們之間的關(guān)系:

1.Parent-Child,按順序從大到小。不是簡單的繼承關(guān)系。

2.ClassLoader有個getParent的方法,但是Ext ClassLoader調(diào)用后得到的是null,bootstrap是JVM自己的,用戶看不到。

3.classloader的委托機制:當?shù)燃壉容^低的ClassLoader要加載某個類的時候,它首先會請求Parent加載器來加載,Parent再請求它的Parent
比如現(xiàn)在Ext要加載了,它往上請求。如果最大的Bootstrap找不到,那么Boot會叫Ext自己找找,Ext找不到,是不會讓下一級的App去找的,此時就報出ClassNotFoundException

4.類A調(diào)用類B,B會要求調(diào)用它的類的類加載器來加載它,也就是B會要求加載A的加載器來加載B。這就會有個問題,如果他們在一起,那沒關(guān)系,肯定某個classloader會把它們倆都加載好。但是如果A在/lib/ext文件夾中,而B在Classpath中呢?過程是這樣的首先加載A,那么一層層上到Bootstrap Classloader,boot沒找到所以ext自己找,找到了,沒問題;加載B,因為A調(diào)用了B,所以也從bootstrap來找,沒找到,然后A的ext classloader來找還是沒找到,但是再也不會往下調(diào)用了,于是報出ClassNotFoundException。
但是現(xiàn)實生活中有很多應(yīng)用,比如JDBC核心方法在核心庫而驅(qū)動在擴展庫,是必定在兩個地方的,那怎么辦呢?要用到Context ClassLoader我們在建立一個線程Thread的時候,可以為這個線程通過setContextClassLoader方法來指定一個合適的classloader作為這個線程的context classloader,當此線程運行的時候,我們可以通過getContextClassLoader方法來獲得此context classloader,就可以用它來載入我們所需要的Class。默認的是system classloader。利用這個特性,我們可以“打破”classloader委托機制了,父classloader可以獲得當前線程的context classloader,而這個context classloader可以是它的子classloader或者其他的classloader,那么父classloader就可以從其獲得所需的 Class,這就打破了只能向父classloader請求的限制了。這個機制可以滿足當我們的classpath是在運行時才確定,并由定制的 classloader加載的時候,由system classloader(即在jvm classpath中)加載的class可以通過context classloader獲得定制的classloader并加載入特定的class(通常是抽象類和接口,定制的classloader中是其實現(xiàn)),例如web應(yīng)用中的servlet就是用這種機制加載的.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产又色又爽又黄又大| 在线免费观看一二区视频| 国产情侣激情在线对白| 亚洲精品一区二区三区免| 麻豆果冻传媒一二三区| 欧美日韩国产福利在线观看| 久久精品亚洲情色欧美| 伊人久久青草地综合婷婷| 亚洲欧美黑人一区二区| 国产成人精品一区在线观看| 美女激情免费在线观看| 欧美在线视频一区观看| 日韩中文字幕欧美亚洲| 国产精品久久女同磨豆腐| 亚洲中文字幕三区四区| 亚洲品质一区二区三区| 黄男女激情一区二区三区| 国内精品伊人久久久av高清| 内射精子视频欧美一区二区| 日韩一区二区三区在线日| 亚洲天堂久久精品成人| 激情亚洲内射一区二区三区| 国产欧美日韩精品自拍| 粉嫩国产美女国产av| 一区二区三区欧美高清| 五月天丁香婷婷狠狠爱| 久久中文字人妻熟女小妇| 国产一区日韩二区欧美| 亚洲国产成人久久99精品| 风间中文字幕亚洲一区| 日韩黄色一级片免费收看| 91亚洲精品亚洲国产| 果冻传媒在线观看免费高清| 在线免费看国产精品黄片| 国产欧美日韩在线精品一二区 | 91老熟妇嗷嗷叫太91| 欧美一级不卡视频在线观看| 欧美成人免费一级特黄| 久久黄片免费播放大全| 婷婷激情五月天丁香社区| 少妇熟女亚洲色图av天堂|