第七章 虛擬機器類載入機制
阿新 • • 發佈:2019-01-09
虛擬機器類載入機制:把描述類的資料從Class檔案載入到記憶體,並對資料進行校驗、轉換解析和初始化,最終形成可以被虛擬機器直接使用的Java型別。
在Java語言中,型別的載入、連線、初始化過程都是在程式執行期間完成的,併為其帶來了高度靈活性,動態載入。
- 類載入的時機:
類的生命週期:載入(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolvtion)、初始化(Initialization)、使用(Using)、解除安裝(Unloading) - 類載入過程:
- 載入:1.通過一個類的全限定名來獲取定義該類二進位制位元組流。2.將二進位制位元組流所代表的靜態儲存結構轉化為方法區的執行時資料結構。3.生成對應的Class物件。
- 驗證:確保Class檔案對應的二進位制位元組流當前的資訊符合當前虛擬機器的要求,確保安全。
- 準備:正式為類變數分配記憶體並設定類變數初始值(通常為零值),在方法區中。
- 解析:虛擬機器將常量池中的符號引用替換為直接引用。
- 初始化:clinit()
- 類載入器:
- 類與類載入器:對於任意一個類,在虛擬機器方法區記憶體中都需要其類載入器與其本省來確定。
- 雙親委派模型:類載入器型別:1.啟動類載入器(Bootstrap Classloader) 2.擴充套件類載入器(Extention ClassLoader) 3.應用程式類載入器(Applicarion ClassLoader)
如果一個類載入器收到了類載入的請求,它首先不會自己去嘗試載入這個類,而是把這個請求委派給父類載入器去完成,每一層次的類載入
器都是如此,因此所有的載入請求最終都應該傳送到頂層的啟動類載入器中,只有當父類載入器反饋自己無法完成這個載入請求時,子類加
載器才會嘗試自己去載入。