日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java高級(jí)篇——深入淺出Java類加載機(jī)制

 諤諤熱 2017-08-07

類加載器

簡(jiǎn)單講,類加載器ClassLoader的功能就是負(fù)責(zé)將class文件加載到j(luò)vm內(nèi)存。

類加載器分類

從虛擬機(jī)層面講分為兩大類型的類加載器,一是Bootstrap Classloader即啟動(dòng)類加載器(C++實(shí)現(xiàn)),它是虛擬機(jī)的一部分,二是其他類型類加載器(JAVA實(shí)現(xiàn)),在虛擬機(jī)外部,并全部繼承ClassLoader類。

Java高級(jí)篇——深入淺出Java類加載機(jī)制

從細(xì)分的角度講會(huì)分為以下三類類加載器:

1、Bootsrap ClassLoader

啟動(dòng)類加載器,完全由jvm控制加載,外面訪問不到這個(gè)類加載器,即不能被java程序引用。它主要負(fù)責(zé)加載jvm自身的工作類,即java/lib目錄和-Xbootclasspath參數(shù)指定的目錄的類庫。

2、Extension ClassLoader

擴(kuò)展類加載器,由java實(shí)現(xiàn),即ExtClassLoader實(shí)現(xiàn)類。它主要負(fù)責(zé)加載java/lib/ext目錄和系統(tǒng)環(huán)境變量java.ext.dirs指定目錄所有類庫。

3、Application ClassLoader

應(yīng)用程序類加載器,由java實(shí)現(xiàn),即AppClassLoader實(shí)現(xiàn)類。它的父類是ExtClassLoader,它主要負(fù)責(zé)加載classpath目錄上的類庫。如果沒有自定義ClassLoader,它就是程序中默認(rèn)的ClassLoader,即可以通過ClassLoader.getSystemClassLoader()獲取當(dāng)前系統(tǒng)的類加載器。

Java高級(jí)篇——深入淺出Java類加載機(jī)制

從上圖看雖然Bootstrap ClassLoader是最頂層的類加載器,但是不能被程序引用,它也不是ExtClassLoader的父類加載器,ExtClassLoader沒有父類載器,我們不防來看下面簡(jiǎn)單的例子。

Java高級(jí)篇——深入淺出Java類加載機(jī)制

程序首先輸出了程序默認(rèn)的類加載器AppClassLoader,然后再輸出了其父類加載器ExtClassLoader,然后就完了,這就證實(shí)了上面的理論。

類加載機(jī)制

雖然定義了上面這幾個(gè)類加載器,但在加載時(shí)類加載器會(huì)審查一個(gè)class類應(yīng)該由哪個(gè)類型的加載器負(fù)責(zé)加載,它使用的是等級(jí)加載機(jī)制,是一種雙親委派模型。

雙親委派模式要求所有類加載器,除了頂層的Bootstrap類加載器之外都要有自己的父類加載器。在收到一個(gè)類加載請(qǐng)求時(shí),當(dāng)前默認(rèn)的類加載器它不會(huì)首先自己來加載這個(gè)類,它會(huì)委托給自己的父類加載器去加載,父類加載器再委托給父父類加載器,以此類推,直到頂層類加載器,由上到下加載,除非上面的類加載器都無法加載時(shí)自己才去加載。

來看看ClassLoader.loadClass方法源碼

Java高級(jí)篇——深入淺出Java類加載機(jī)制

再回到之前文章中的有一道關(guān)于是否可以自定義類java.lang.String并使用的面試題,它在java/lib目錄下,所以當(dāng)應(yīng)用類加載器去classpath加載時(shí)會(huì)去委托父類加載器,這時(shí)最頂層類加載器會(huì)發(fā)現(xiàn)自己之前已經(jīng)加載過,所以這次不再加載,所以自定義的這個(gè)java.lang.String雖然可以正常編譯,但不能被類加載器加載并使用。

所以,這也是雙親委派模式的好處,同一個(gè)路徑的類保證不能加載兩次,保證了類與類之間的正常行為和正常運(yùn)行。

代碼及所有資源請(qǐng)加java群274435854下載,我們一起學(xué)習(xí)交流。

架構(gòu)之路,頭條精選,每天一篇干貨,喜歡就收藏+關(guān)注吧!

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多