java的3大加載器
-
引導類加載器
BootStrapClassLoader -
擴展類加載器
ExtensionClassLoader -
應用程式類加載器
ApplicationClassLoader三大類加載器可以簡單的理解為:
BootStrapClassLoader加載的是JVM核心類的類別庫
ExtensionClassLoader加載的是擴展類的類別庫
ApplicationClassLoader加載我們自己寫的java類類別庫
類的加載器加載了哪些類別庫
jdk1.8中BootStrapClassLoader加載D:\Program Files\Java\jdk1.8.0_201\jre\lib下的
- resources.jar
- rt.jar
- sunrsasign.jar
- jsse.jar
- jce.jar
- charsets.jar
- jfr.jar
以及D:/Program Files/Java/jdk1.8.0_201/jre/classes檔案夾下的class檔案
ExtensionClassLoader加載java的擴展類類別庫
D:\Program Files\Java\jdk1.8.0_201\jre\lib\ext
例如
- access-bridge-64.jar
- cldrdata.jar
- dnsns.jar
- jaccess.jar
- jfxrt.jar
- localedata.jar
- nashorn.jar
- sunec.jar
- sunjce_provider.jar
- sunmscapi.jar
- sunpkcs11.jar
- zipfs.jar
ApplicationClassLoader加載應用程式的類
java應用程式啟動的程序:
- 首先
.java檔案被javac編譯成.class檔案, - 當我們啟動
java程式的時候,.class檔案通過類加載子系統加載到記憶體中,類加載子系統分為3大加載器(BootStrapClassLoader、ExtensionClassLoader、ApplicationClassLoader),
首先需要加載java基礎的類別庫(上面有介紹),也就是BootStrapClassLoader加載java類別庫,當引導類加載器加載完畢后,接著ExtensionClassLoader加載擴展類類別庫,再接著就是ApplicationClassLoader將main方法所在的類加載到記憶體中,
在程式的運行程序中會使用到其它類檔案,加載除main方法以為的類時,存在 類的雙親委托機制 以及 沙箱機制,可以簡單的理解為先詢問BootStrapClassLoader有沒有將類加載到記憶體,如果沒有再詢問ExtensionClassLoader有沒有將這個類加載到記憶體,如果前面都沒有加載才會使用ApplicationClassLoader進行加載,BootStrapClassLoader、ExtensionClassLoader他們加載的類路徑是固定的,因此他們加載的類也是比較固定的(除非將自己的類放到類別庫路徑下), - 類的加載子系統又進一步分為:加載、鏈接、初始化,
類加載到記憶體中會經過加載、驗證、準備、決議、初始化(主要是 靜態成員變數、靜態代碼塊 的初始化),初始化完成后才算加載到記憶體中
完成上面動作后應用程式就算啟動完成了,剩下的就是應用程式的生命周期
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/131740.html
標籤:AI
