ClassLoader 的分類及加載順序

ClassLoader的分類有哪些?加載順序是什麼?類加載的順序又是什麼?html

答:ClassLoader分爲4種:Jvm類加載器(BootstarpClassLoader),Jvm擴展類加載器(extClassLoader),系統類加載器(SystemClassLoader),自定義類加載器(AppClassLoader)java

JVM預約義有三種類加載器,當一個 JVM啓動的時候,Java開始使用以下三種類加載器:面試

 1)根類加載器(bootstrap class loader):這個類加載器負責將\lib目錄下的類庫加載到虛擬機內存中,用來加載java的核心庫,此類加載器並不繼承於java.lang.ClassLoader,不能被java程序直接調用,代碼是使用C++編寫的.是虛擬機自身的一部分。bootstrap

2)擴展類加載器(extensions class loader):它負責加載JRE的擴展目錄,lib/ext或者由java.ext.dirs系統屬性指定的目錄中的JAR包的類。由Java語言實現,父類加載器爲null。緩存

3)系統類加載器(system class loader):被稱爲系統(也稱爲應用)類加載器,它負責在JVM啓動時加載來自Java命令的-classpath選項、java.class.path系統屬性,或者CLASSPATH換將變量所指定的JAR包和類路徑。程序能夠經過ClassLoader的靜態方法getSystemClassLoader()來獲取系統類加載器。若是沒有特別指定,則用戶自定義的類加載器都以此類加載器做爲父加載器。由Java語言實現,父類加載器爲ExtClassLoader。spa

類加載器加載Class大體要通過以下8個步驟:.net

1檢測此Class是否載入過,即在緩衝區中是否有此Class,若是有直接進入第8步,不然進入第2步。
2 若是沒有父類加載器,則要麼Parent是根類加載器,要麼自己就是根類加載器,則跳到第4步,若是父類加載器存在,則進入第3步。
3 請求使用父類加載器去載入目標類,若是載入成功則跳至第8步,不然接着執行第5步。
4 請求使用根類加載器去載入目標類,若是載入成功則跳至第8步,不然跳至第7步。
5 當前類加載器嘗試尋找Class文件,若是找到則執行第6步,若是找不到則執行第7步。
6 從文件中載入Class,成功後跳至第8步。
7 拋出ClassNotFountException異常。
8 返回對應的java.lang.Class對象htm

緩衝區是否有class ---->無則請求父類加載器   ---->無則請求根類加載器 ---->無則請問當前類加載器

----------------------------------------------------------------------------------------------------------------------------對象

ClassLoader加載順序:blog

=>Jvm類加載器加載JAVA_HOME/lib下的全部jar文件

=>Jvm擴展類加載器加載JAVA_HOME/lib/ext下的全部jar文件

=>系統類加載器加載指定classpath下全部jar文件

=>自定義類加載器加載繼承官方提供的ClassLoader類的自定義實現加載器class文件。

----------------------------------------------------------------------------------------------------------------------------

類加載的順序是

加載->連接(驗證+準備+解析)->初始化(使用前的準備)->使用->卸載 

Jvm會在啓動的時候去加載系統所必須的JAVA_HOME/lib下的全部jar文件,

Jvm對於第三方類會才用懶加載的方式,即:用到的時候再進行加載,加載完成會放入緩存,以便後續使用。

 

 

面試題:

在本身的代碼中,能夠建立一個java.lang.String對象嗎?若是能夠,這個對象是否能夠被類加載器加載?
能夠建立,可是不能被加載到。

由於,雙親委派模式會保證父類加載器先加載類,就是BootStrap(啓動類)加載器加載jdk裏面的java.lang.String類,而自定義的java.lang.String類永遠不會被加載到

 

 

轉載:http://www.javashuo.com/article/p-phlcpojs-ey.html 

           https://blog.csdn.net/m0_38075425/article/details/81627349 

相關文章
相關標籤/搜索