天天看點

java加載class檔案的原理

JVM中類的裝載是由類加載器(ClassLoader)和它的子類來實作的,Java中的類加載器是一個重要的Java運作時系統元件,它負責在運作時查找和裝入類檔案中的類。

由于Java的跨平台性,經過編譯的Java源程式并不是一個可執行程式,而是一個或多個類檔案。當Java程式需要使用某個類時,JVM會確定這個類已經被加載、連接配接(驗證、準備和解析)和初始化。類的加載是指把類的.class檔案中的資料讀入到記憶體中,通常是建立一個位元組數組讀入.class檔案,然後産生與所加載類對應的Class對象。加載完成後,Class對象還不完整,是以此時的類還不可用。當類被加載後就進入連接配接階段,這一階段包括驗證、準備(為靜态變量配置設定記憶體并設定預設的初始值)和解析(将符号引用替換為直接引用)三個步驟。最後JVM對類進行初始化,包括:1)如果類存在直接的父類并且這個類還沒有被初始化,那麼就先初始化父類;2)如果類中存在初始化語句,就依次執行這些初始化語句。

類的加載是由類加載器完成的,類加載器包括:根加載器(BootStrap)、擴充加載器(Extension)、系統加載器(System)和使用者自定義類加載器(java.lang.ClassLoader的子類)。從Java 2(JDK 1.2)開始,類加載過程采取了父親委托機制(PDM)。PDM更好的保證了Java平台的安全性,在該機制中,JVM自帶的Bootstrap是根加載器,其他的加載器都有且僅有一個父類加載器。類的加載首先請求父類加載器加載,父類加載器無能為力時才由其子類加載器自行加載。JVM不會向Java程式提供對Bootstrap的引用。下面是關于幾個類加載器的說明: