JVM 的 noverify 啟動參數(shù)問題解析
當(dāng) ClassLoader 加載的 Java 字節(jié)碼時,字節(jié)碼首先接受校驗器(verifier)的校驗。校驗器負責(zé)檢查那些指令無法執(zhí)行的明顯的破壞性的操作。
校驗器執(zhí)行的檢查操作:
- 變量要在使用之前進行初始化。
- 方法調(diào)用與對象應(yīng)用類型之間要匹配。
- 訪問私有數(shù)據(jù)和方法的規(guī)則沒有被違反。
- 對本地變量的訪問都在運行時堆棧內(nèi)。
- 運行時堆棧沒有溢處。
如果你不希望 JVM 運行這個校驗的話,你可以添加 noverify
參數(shù)
JDK 13 + 版本的問題
從 JDK 13 開始及其后續(xù)版本中,不建議繼續(xù)使用 -Xverify:none
和-noverify
參數(shù)。
否則,你將會得到下面的錯誤:
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
運行參數(shù)。
你需要在 JVM 的運行中取消到上面這個參數(shù)。
在加載類時,驗證類是否正確需要一些時間。由于類可能以延遲方式加載(不是在app start上,而是在第一次使用時),這可能會導(dǎo)致意外的運行時延遲。
實際上,類一般不需要檢查。編譯器不會發(fā)出任何無效的字節(jié)碼或類構(gòu)造。進行驗證的原因是,該類可能構(gòu)建在一個系統(tǒng)上,聯(lián)機托管,并通過不受保護的internet傳輸給您。
在這個路徑上,惡意攻擊者可能修改字節(jié)碼并創(chuàng)建編譯器可能永遠不會創(chuàng)建的內(nèi)容;可以使JVM崩潰或可能繞過安全限制的東西。因此,在使用類之前對其進行驗證。如果這是一個本地應(yīng)用程序,通常不需要再次檢查字節(jié)碼。
到此這篇關(guān)于JVM 的 noverify 啟動參數(shù)的文章就介紹到這了,更多相關(guān)JVM noverify 啟動參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于java中構(gòu)造函數(shù)的一些知識詳解
下面小編就為大家?guī)硪黄P(guān)于java中構(gòu)造函數(shù)的一些知識詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12Spring條件注解@ConditionnalOnClass的原理分析
這篇文章主要介紹了Spring條件注解@ConditionnalOnClass的原理分析,所謂@ConditionalOnClass注解,翻譯過來就是基于class的條件,它為所標(biāo)注的類或方法添加限制條件,當(dāng)該條件的值為true時,其所標(biāo)注的類或方法才能生效,需要的朋友可以參考下2023-12-12