【发布时间】:2014-09-28 12:23:52
【问题描述】:
根据这个话题: Reasons of getting a java.lang.VerifyError
java.lang.VerifyError 获取执行 jvm 的版本是否比用于编译的 jvm 更新。
我们总是可以使用以下 jvm 选项来解决这个问题:-XX:-UseSplitVerifier。
据此:
https://stackoverflow.com/a/16467026/2674303
使用此选项“非常安全”。
因此我不明白为什么 java.lang.VerifyError 是阻止成功编译的问题。请澄清。也许对于检测字节码的库来说不安全?
【问题讨论】:
-
它不会“阻止”成功编译。相反,编译在某种程度上不成功/错误,导致了 VerifyError。从本质上讲,.class 文件似乎已损坏。
-
(但是引用的线程谈到使用一个选项导致 JVM 使用旧验证器而不是“改进”的验证器。目前尚不清楚被规避的问题是否在类文件中(在StackMapTable 构造)或在新的验证器中(使用该表),但在任何一种情况下,规避都应该是完全安全的。)
标签: java jvm compatibility bytecode bytecode-manipulation