解決 java.lang.VerifyError: Stack map does not match the one at exception

解決 java.lang.VerifyError: Stack map does not match the one at exception

背景

在寫AOP程序時,測試出現了錯誤,jdk版本11。
錯誤信息

問題根源

JVM加載class文件時會做字節碼校驗(bytecode verification)。如果你的class文件是由java源文件通過javac編譯出來的,那麼基本上不用擔心bytecode verification。 如果class文件是由asm、cglib等動態生成出來的或者由其它編譯器生成的,那麼JVM在校驗它的bytecode時就有可能失敗。 失敗的原因可能是你生成的bytecode有bug,也可能是由於新版本的JVM加入了新的驗證條件後導致原來可以通過驗證的bytecode現在不能通過了。

很多Java框架都會動態生成class文件,再加上JVM版本也會時不時地修改它的bytecode verification行爲。 所以,運行代碼時偶爾會遇到java.lang.VerifyError錯誤。 在不能修改框架代碼或者切換JVM實現的情況下,JVM提供了一些選項可以讓你改變或者繞過bytecode verification。

解決方案

進行參數配置,禁止字節碼校驗。
配置vm參數 -noverify
參數配置
運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章