1. 程式人生 > >對類加載器(ClassLoader)的理解

對類加載器(ClassLoader)的理解

相對 logs 重要 posit 相關 編譯 class jdk安裝 ima

類加載器(ClassLoader)

  當編輯器編譯java源文件後,會產生以個相對一的字節碼文件(.class)

  當程序執行開始之前,必須將這個文件載入內存中,生成一個與之匹配的Class對象,

  任何以個類加載之後jvm都會為其創建以個唯一的class對象(元對象),再後續都是通過這個Class對象來創建實例,後話(Class對象就是放射的基石。)

  這個過程我們稱之為類加載

  要弄清楚類加載的機制,授信我們必須要清楚了解類加載的相關知識,它是完成整個類加載的重要工具。

  簡單的說,當有個Class文件載入內存之後,並構建成一個Class對象的過程,就稱之為類加載

類加載器(三類)

1,啟動類加載器(BootStrap ClassLoader)

  啟動類加載器是負責加載jdk核心包下的類文件,對應的目錄就是“JDK安裝目錄/jre/lib”。其中最重要的以個jar文件就是rt.jar

  註意:這個類加載器我們是沒有辦法區操作的,因為它本身是用c++語言實現的

2,擴展類加載器(Extension ClassLoader)

  這個類加載器,是由啟動類加載器來加載的,擴展類加載器是用java語言實現,它主要負責加

  載jdk裏面的擴展jar文件,對應 目錄是"/JDK安裝目錄/jre/lib/ext"

3,應用程序類加載器(Application ClassLoader)

  這個類加載器也是使用java語言實現,它同樣由引導類加載器加載。它主要負責加載我們開發人員說明編寫的java類,通常對應的目錄就是環境變量下的ClassPath路徑

雙親委托模型

  jvm的類加載時基於雙親委托模型,也就是當我們編寫一個任意類的時候,本身不是由應用程序加載器立即加載,而是先委托給夫加載器,當夫加載器再自己說明加載的範圍內找不到相對應的class文件時,最後才會將加載權交回給子加載器區加載,這樣做的目的是為了保證jvm的安全機制

技術分享圖片

雙親委托模型的工作流程:

  如果以個類加載器收到類加載的請求,它首先不會自己先嘗試加載這個類,而是把請求委托給父類加載器去完成,依次向上,因此,所有的類加載器請求最終都應該被傳遞到頂層的啟動類的加載器中,只有當父加載器在它的搜索範圍中沒有找到所需要的類時,即無法完成該加載,子加載器才會嘗試自己去加載類

對類加載器(ClassLoader)的理解