这篇文章主要介绍了JVM的noverify启动参数问题解析,从JDK13开始及其后续版本中,不建议继续使用 -Xverify:none 和-noverify 参数,本文给大家介绍的非常详细,需要的朋友可以参考下
当 ClassLoader 加载的 Java 字节码时,字节码首先接受校验器(verifier)的校验。校验器负责检查那些指令无法执行的明显的破坏性的操作。
校验器执行的检查操作:
- 变量要在使用之前进行初始化。
- 方法调用与对象应用类型之间要匹配。
- 访问私有数据和方法的规则没有被违反。
- 对本地变量的访问都在运行时堆栈内。
- 运行时堆栈没有溢处。
如果你不希望 JVM 运行这个校验的话,你可以添加 noverify 参数
JDK 13 + 版本的问题
从 JDK 13 开始及其后续版本中,不建议继续使用 -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上,而是在第一次使用时),这可能会导致意外的运行时延迟。
实际上,类一般不需要检查。编译器不会发出任何无效的字节码或类构造。进行验证的原因是,该类可能构建在一个系统上,联机托管,并通过不受保护的internet传输给您。
在这个路径上,恶意攻击者可能修改字节码并创建编译器可能永远不会创建的内容;可以使JVM崩溃或可能绕过安全限制的东西。因此,在使用类之前对其进行验证。如果这是一个本地应用程序,通常不需要再次检查字节码。
到此这篇关于JVM 的 noverify 启动参数的文章就介绍到这了,更多相关JVM noverify 启动参数内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:JVM 的 noverify 启动参数问题解析
基础教程推荐
- Java实现查找文件和替换文件内容 2023-04-06
- Java并发编程进阶之线程控制篇 2023-03-07
- Java实现线程插队的示例代码 2022-09-03
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- java基础知识之FileInputStream流的使用 2023-08-11
- Java数据结构之对象比较详解 2023-03-07
- Java文件管理操作的知识点整理 2023-05-19
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- java实现多人聊天系统 2023-05-19
- springboot自定义starter方法及注解实例 2023-03-31