類裝載器ClassLoader

    類裝載器是尋找類的字節碼(也就是class文件)文件並構造出類在JVM內部表示的對象組件。

 

    類裝載器把一個類裝入JVM三個步驟

1、裝載:查找導入class文件

2、鏈接:校驗、準備、解析(可選)

      校驗:檢查載入class文件的正確性

      準備:給類的靜態變量分配存儲空間

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

3、初始化:對靜態變量、靜態代碼塊執行初始化工作

 

      ClassLoader是java 的一個運行時系統組件,負責裝載class文件。JVM運行時會產生三個ClassLoader:根裝載器、ExtClassLoader(擴展類裝載器)、AppClassLoader(系統類裝載器)。這三個類存在父子層級關係,即根裝載器是ExtClassLoader的父裝載器,ExtClassLoader是AppClassLoader的父裝載器。默認情況下使用AppClassLoader。

      其中根裝載器不是ClassLoader的子類,它是用C++編寫的,在java中找不到它,它負責裝載jre的核心類庫,如rt.jar、charsets.jar等。

      ExtClassLoader負責裝載jre擴展目錄下的jar包。

      AppClassLoader負責裝載ClassPath路徑下的類包。

 

      Java裝載類使用“全盤負責委託機制”。“全盤負責”是指當一個ClassLoder裝載一個類時,除非顯示的使用另外一個ClassLoder,該類所依賴及引用的類也由這個ClassLoder載入;“委託機制”是指先委託父類裝載器尋找目標類,只有在找不到的情況下才從自己的類路徑中查找並裝載目標類。這一點是從安全方面考慮的,試想如果一個人寫了一個惡意的基礎類(如java.lang.String)並加載到JVM將會引起嚴重的後果,但有了全盤負責制,java.lang.String永遠是由根裝載器來裝載,避免以上情況發生。

 

       除了JVM默認的三個ClassLoder以外,第三方可以編寫自己的類裝載器,以實現一些特殊的需求。類文件被裝載解析後,在JVM中都有一個對應的java.lang.Class對象,提供了類結構信息的描述。數組,枚舉及基本數據類型,甚至void都擁有對應的Class對象。

 

網上有個大牛有更詳細的關於類裝載器的介紹,網址http://blog.csdn.net/hudashi/article/details/7062850        http://blog.csdn.net/hudashi/article/details/7062849

 

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