筆者博客地址:https://charpty.com
“驗證”是“連接”的步驟之一,在“類加載”第一步“加載”完成后,虛擬機(jī)并不一定立即開始對類信息進(jìn)行“連接”,這取決于虛擬機(jī)的模式和當(dāng)前狀態(tài)。可能會在主方法執(zhí)行時一次性完成所有類的連接,稱為早連接,或者在類的符號引用首次被訪問時才去執(zhí)行連接,稱為晚連接,我們先不關(guān)心何時進(jìn)行類的“連接”操作,僅來關(guān)注“連接”的過程,“連接”的過程大致如下:
“驗證”是“連接”階段的第一步,這一階段是為了確保Class文件字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會危害虛擬機(jī)自身的安全。 雖然按理說這些*.class文件都是由java自己的編譯器生成的,但是JVM僅僅負(fù)責(zé)加載class文件,不排除有人惡意生成class文件或者Java的編譯器生成時有錯誤(可能性很小),所以“驗證”階段非常重要,防止惡意的破壞以及不符合Java規(guī)范的語法。
// TODO
參考:https://docs.Oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10
新聞熱點
疑難解答