2013-04-14 13 views

回答

2

解析過程必須由JVM完成,以便理解要加載的代碼。如果它沒有解決引用,那麼JVM不能執行這些方法。 (並且解決方案還檢查簽名和事物是否仍然匹配...以防止JVM免受堆損壞等等,從而導致二進制不兼容問題)

相比之下,驗證過程是關於檢查字節碼本身是否做錯事。如果它們是由正確的編譯器生成的,那麼這種情況不會發生,但是如果字節碼是由錯誤的編譯器,錯誤注入程序生成的......或者由某個壞人干擾了字節碼,那麼驗證器會提供一系列的防禦措施。

關鍵的區別是分辨率是必不可少的,但驗證是(有點)可選的。事實上,分離解析和驗證意味着可以關閉驗證。有一個命令行選項可以做到這一點。 (在正常情況下關閉驗證是一個好主意......國際海事組織很可疑)