一、加載
JVM將Java類的二進制形式加載到內存中,並且可以將它緩存在內存中,以備將來再次使用這個類。如果沒有找到指定的類,就會拋出一個錯誤,進程就在這裏結束了。
二、鏈接
在這個階段需要做三件事:驗證、準備和解析。驗證的意思是,JVM會根據Java變成語言和JVM的語義要求檢查這個二進制形式。假如你篡改編譯後的類文件,那麼這個類文件可能就不再有效了。
準備工作是爲執行準備特定的類。這包括這個類的靜態變量和其他數據分配內容空間。
解析是檢查特定的類是否引用了其他類/接口,以及是否也能找到和加載其他的類/接口。這個檢查將針對被引用的類/接口遞歸進行加載、鏈接和初始化。
三、初始化
在這最後一步中,JVM會利用所賦的值或者默認值將靜態變量初始化,並執行靜態的初始化程序(static塊中的代碼)。初始化發生在執行main方法之前。但是,在可以初始化指定的類之前,它的父類必須先初始化。如果還沒有加載和鏈接父類,JVM就會先加載和鏈接父類。同樣,當父類要初始化時,父類的父類也要先初始化。這個過程是遞歸進行的,直到初始化的類稱爲層次結構中最上面的類爲止。