類加載器體系

1、啟動類加載器:Bootstrap ClassLoader :加載對象是java核心庫,把一些核心的類加載進(jìn)jvm中,使用原生C/C++實現(xiàn),所有類的加載器的父加載器。無法被java程序使用。

2、擴(kuò)展類加載器:Extension ClassLoader:加載對象為java擴(kuò)展庫,由啟動類加載器加載,getParent()返回null;

3、應(yīng)用程序類加載器:Application ClassLoader:系統(tǒng)類加載器,加載用戶類路徑指定的類庫,程序沒有自定義加載器,為默認(rèn)加載器。父類為擴(kuò)展類加載器;

雙親委托機(jī)制:

一個類加載進(jìn)來,委托給父類加載器加載,父類加載器又嘗試委托給其父類加載器,以此類推,直到父類加載器為啟動類加載器。父類加載器反饋無法加載時,子加載器才會嘗試自己加載。

優(yōu)點:

1、保證java應(yīng)用所使用的都是同一個版本java核心庫的類;

2、保證安全性,啟動類加載器檢查緩存中已經(jīng)有加載的類,不會再次加載外部的類;

全盤負(fù)責(zé)機(jī)制:

一個類加載器加載一個類時,如果沒有顯式指定類加載器,該類所依賴的、引用的其他所有類都由這個類加載器加載;

jvm中,同一個jvm中可以有兩個包名、類名都相同的類,只要他們由兩個不同的類加載器加載。該特征提供了隔離機(jī)制,tomcat的hotswap機(jī)制;

報錯ClassNotFoundException

原因:類加載器加載引用類時,只會向上查找引用類,而不會從子類加載器上查找;

解決方式:

1、用同一個類加載器;

2、a,b兩個類,b類引用a類,a類加載器大于b類的加載器;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容