前言
最近学习 Springboot ,当编译一个练习项目的时候,出现了
Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release. 这条警告
本来对项目运行没什么影响,但是无奈强迫症又犯了,于是折腾了一上午,终于解决了这条警告,简单记录一下过程。
首先我们应该明白的是:-Xverify:no 或者 -noverify 这两个都是 JVM 参数,可以禁止字节码校验,提高编译速度,但是就如同警告所说,这两个参数已经过时了。我们可以使用命令提示符查看详细信息
java -X
1
可是我们在idea编译控制台上可以看到,idea 编译的时候是带上 -noverify 这个参数的,所以我们主要目的应该是找到是什么设置了这个参数。
尝试方法一:删掉用户变量 _JAVA_OPTIONS
根据Stack Overflow 上的帖子说,有些项目会自动将 _JAVA_OPTIONS 加到用户环境变量中,例如今天我们所讨论的警告就有可能是 _JAVA_OPTIONS 的值设置成了 -Xverify:no 或者 -noverify
这个方法对某些情况或许有效,应为我看到YouTube 上也有这样的教程,但是并没有解决我的问题,
于是我 尝试了方法二
尝试方法二:修改项目VM OPTIONS
在 idea 中每个项目都可以设置对应的 vm options, 依次选择 RUN >> Edit Configurations…
idea 自身也有默认的 VM options , 依次选则 Help >> Edit Custom VM options, 即可添加或删除参数
参数优先级为:项目中的VM options > idea 自身的 VM option
但是就像图中所示的一样,我根本没有添加 -Xverify:no 或者 -noverify 参数, 所以这个方法对我来说还是失败
尝试方法三:不要勾选 Enable lanuch optimization
在idea 中 ,依次选择RUN >> Edit Configurations… 找到 Spring boot 相关选项,取消勾选 Enable lanuch optimization
具体原因,如果你将鼠标悬停在这个选项上面,就可以看到解释,大致意思是说,如果我们勾选上这个,就会增加两个 JVM 参数 -XX:TieredStopAtLevel=1 和 -noverify ,从而可以禁止字节码校验,来提高编译速度, 这下终于知道 -noverify, 参数从那里来的了。