類加載--jvm的加載、鏈接和初始化

一、加載

JVM將Java類的二進制形式加載到內存中,並且可以將它緩存在內存中,以備將來再次使用這個類。如果沒有找到指定的類,就會拋出一個錯誤,進程就在這裏結束了。

二、鏈接

在這個階段需要做三件事:驗證、準備和解析。驗證的意思是,JVM會根據Java變成語言和JVM的語義要求檢查這個二進制形式。假如你篡改編譯後的類文件,那麼這個類文件可能就不再有效了。

準備工作是爲執行準備特定的類。這包括這個類的靜態變量和其他數據分配內容空間。

解析是檢查特定的類是否引用了其他類/接口,以及是否也能找到和加載其他的類/接口。這個檢查將針對被引用的類/接口遞歸進行加載、鏈接和初始化。

三、初始化

在這最後一步中,JVM會利用所賦的值或者默認值將靜態變量初始化,並執行靜態的初始化程序(static塊中的代碼)。初始化發生在執行main方法之前。但是,在可以初始化指定的類之前,它的父類必須先初始化。如果還沒有加載和鏈接父類,JVM就會先加載和鏈接父類。同樣,當父類要初始化時,父類的父類也要先初始化。這個過程是遞歸進行的,直到初始化的類稱爲層次結構中最上面的類爲止。



發佈了40 篇原創文章 · 獲贊 22 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章