其中類加載的過(guò)程包括了加載、驗(yàn)證、準(zhǔn)備、解析、初始化五個(gè)階段。在這五個(gè)階段中,加載、驗(yàn)證、準(zhǔn)備和初始化這四個(gè)階段發(fā)生的順序是確定的,而解析階段則不一定,它在某些情況下可以在初始化階段之后開(kāi)始,這是為了支持Java語(yǔ)言的運(yùn)行時(shí)綁定(也成為動(dòng)態(tài)綁定或晚期綁定)*。
另外注意這里的幾個(gè)階段是按順序開(kāi)始,而不是按順序進(jìn)行或完成,因?yàn)檫@些階段通常都是互相交叉地混合進(jìn)行的,通常在一個(gè)階段執(zhí)行的過(guò)程中調(diào)用或激活另一個(gè)階段。
1、類的加載:查找并加載類的二進(jìn)制數(shù)據(jù)
2、連接
驗(yàn)證:確保被加載的類的正確性準(zhǔn)備: 為類的靜態(tài)變量分配內(nèi)存,并將其初始化為默認(rèn)值解析:把類中的符號(hào)引用轉(zhuǎn)換為直接引用
3、初始化:為類的靜態(tài)變量賦予正確的初始值,JVM負(fù)責(zé)對(duì)類進(jìn)行初始化,主要對(duì)類變量進(jìn)行初始化。
4、使用: 類訪問(wèn)方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)的接口, 對(duì)象是Heap區(qū)的數(shù)據(jù)
5、卸載: 結(jié)束生命周期