類加載過(guò)程---驗(yàn)證
目的:
為了保證class文件中字節(jié)流包含的信息符合java虛擬機(jī)的要求。
四個(gè)階段驗(yàn)證:
1 文件格式驗(yàn)證
目的:確保class文件格式的規(guī)范。
確保輸入的字節(jié)流正確解析,并存儲(chǔ)于方法區(qū)之內(nèi)。所以此階段是基于二進(jìn)制字節(jié)流進(jìn)行的。而后面的三個(gè)驗(yàn)證階段,全部是基于方法區(qū)的存儲(chǔ)結(jié)構(gòu)進(jìn)行的。
比如:驗(yàn)證魔數(shù),主次版本,常量類型等
2 元數(shù)據(jù)驗(yàn)證
目的:對(duì)字節(jié)碼描述的信息進(jìn)行語(yǔ)義分析,確保其描述的信息符合java語(yǔ)法規(guī)范。
比如:檢查接口和父類,繼承與抽象方法等
3 字節(jié)碼驗(yàn)證
目的:對(duì)類的方法體進(jìn)行校驗(yàn)分析,主要通過(guò)數(shù)據(jù)流和控制流分析,確定程序語(yǔ)義是合理,符合邏輯的。
比如:跳轉(zhuǎn)指令,方法體中的類型轉(zhuǎn)換是有效的等
4 符號(hào)引用驗(yàn)證
目的:它發(fā)生在虛擬機(jī)將符號(hào)引用轉(zhuǎn)化為直接引用的時(shí)候。其目的是確保解析動(dòng)作能正常執(zhí)行。
符號(hào)應(yīng)用可以看作是對(duì)類自身以外的信息進(jìn)行匹配性校驗(yàn)。
備注:
驗(yàn)證階段是非必要的,可以使用-Xverify:none參數(shù)來(lái)關(guān)閉大部分的類校驗(yàn)措施,以縮短虛擬機(jī)類加載的時(shí)間。
Boy-20180721