Java ClassLoader 基礎

基本概念:

Java Classloader(類裝載器):JRE的一個模塊,用於裝載Java類到JVM。


JRE加載一個類到JVM需要以下基本步驟:

  1. 裝載:查找並導入class文件,如String.class; 

  2. 鏈接:校驗、準備、解析,其中解析步驟是可以選擇的,由使用目的決定; 

  3. 校驗:檢查載入class文件數據的正確性,因爲某些class文件可能是利用工具生成,而非使用Java編譯器編譯生成; 

  4. 準備:給類的靜態成員分配存儲空間; 

  5. 解析:將符號引用轉成直接引用; 

  6. 初始化:對類的靜態成員、靜態代碼塊執行初始化工作。


JRE自帶的的三個ClassLoader:

  1. Bootstrap class loader:用於裝載<JAVA_HOME>/jre/lib目錄下的Java核心類庫,該裝載器使用本地代碼實現,本身不是Java類。

  2. Extensions class loader:用於裝載<JAVA_HOME>/jre/lib/ext目錄下的類庫,或者java.ext.dirs系統屬性指定的目錄,具體實現類是sun.misc.Launcher$ExtClassLoader。

  3. System class loader:用於裝載應用CLASSPATH路徑指定的類與資源(如配置文件等),具體實現類是sun.misc.Launcher$AppClassLoader,所以也常稱爲App class loader。


爲什麼需要三個class loader?這三個class loader又是如何分工了?這年代靠拼爹,需要任何東西儘管先向爹要,爹沒有再自己拼,下圖中100萬比喻爲請求的類,天一爲System class loader,天一爸爸爲Extensions class loader,天一爺爺爲BootStrap class loader,查看保險箱相當於load class,通過這個形象的比喻可以簡單的理解class loader代理關係,以及單一職責鏈模式。JRE提供三個class loader主要是爲了分工以及JVM實現的需要。

wKioL1RrNofQy5W8AALl3ik0_QY582.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章