JVM 的 noverify 啟動參數問題解析
當 ClassLoader 加載的 Java 字節(jié)碼時,字節(jié)碼首先接受校驗器(verifier)的校驗。校驗器負責檢查那些指令無法執(zhí)行的明顯的破壞性的操作。
校驗器執(zhí)行的檢查操作:
- 變量要在使用之前進行初始化。
- 方法調用與對象應用類型之間要匹配。
- 訪問私有數據和方法的規(guī)則沒有被違反。
- 對本地變量的訪問都在運行時堆棧內。
- 運行時堆棧沒有溢處。
如果你不希望 JVM 運行這個校驗的話,你可以添加 noverify
參數
JDK 13 + 版本的問題
從 JDK 13 開始及其后續(xù)版本中,不建議繼續(xù)使用 -Xverify:none
和-noverify
參數。
否則,你將會得到下面的錯誤:
warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
如果你使用的是 OpenJ9 的話,會得到下面的錯誤。
JVMJ9VM193W Since Java 13 -Xverify:none and -noverify were deprecated for removal and may not be accepted options in the future.
警告的原因為:
你的 JDK 使用了高于 13 的版本,但是你還是使用了-noverify
運行參數。
你需要在 JVM 的運行中取消到上面這個參數。
在加載類時,驗證類是否正確需要一些時間。由于類可能以延遲方式加載(不是在app start上,而是在第一次使用時),這可能會導致意外的運行時延遲。
實際上,類一般不需要檢查。編譯器不會發(fā)出任何無效的字節(jié)碼或類構造。進行驗證的原因是,該類可能構建在一個系統(tǒng)上,聯機托管,并通過不受保護的internet傳輸給您。
在這個路徑上,惡意攻擊者可能修改字節(jié)碼并創(chuàng)建編譯器可能永遠不會創(chuàng)建的內容;可以使JVM崩潰或可能繞過安全限制的東西。因此,在使用類之前對其進行驗證。如果這是一個本地應用程序,通常不需要再次檢查字節(jié)碼。
到此這篇關于JVM 的 noverify 啟動參數的文章就介紹到這了,更多相關JVM noverify 啟動參數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring條件注解@ConditionnalOnClass的原理分析
這篇文章主要介紹了Spring條件注解@ConditionnalOnClass的原理分析,所謂@ConditionalOnClass注解,翻譯過來就是基于class的條件,它為所標注的類或方法添加限制條件,當該條件的值為true時,其所標注的類或方法才能生效,需要的朋友可以參考下2023-12-12