2
我想了解Java中的動態鏈接。讀過http://slurp.doc.ic.ac.uk/pubs/observing/linking.html#resolutionJava中的動態鏈接:驗證程序與分辨率
我不太瞭解字節碼驗證程序和解析過程之間的區別。爲什麼驗證者不執行通過解決方案執行的檢查?
我想了解Java中的動態鏈接。讀過http://slurp.doc.ic.ac.uk/pubs/observing/linking.html#resolutionJava中的動態鏈接:驗證程序與分辨率
我不太瞭解字節碼驗證程序和解析過程之間的區別。爲什麼驗證者不執行通過解決方案執行的檢查?
解析過程必須由JVM完成,以便理解要加載的代碼。如果它沒有解決引用,那麼JVM不能執行這些方法。 (並且解決方案還檢查簽名和事物是否仍然匹配...以防止JVM免受堆損壞等等,從而導致二進制不兼容問題)
相比之下,驗證過程是關於檢查字節碼本身是否做錯事。如果它們是由正確的編譯器生成的,那麼這種情況不會發生,但是如果字節碼是由錯誤的編譯器,錯誤注入程序生成的......或者由某個壞人干擾了字節碼,那麼驗證器會提供一系列的防禦措施。
關鍵的區別是分辨率是必不可少的,但驗證是(有點)可選的。事實上,分離解析和驗證意味着可以關閉驗證。有一個命令行選項可以做到這一點。 (在正常情況下關閉驗證是一個好主意......國際海事組織很可疑)