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