升级JDK17,报错:Exception java.lang.reflect.InaccessibleObjectException: Unable to make protected native

问题重点及分析
module java.base does not “opens java.lang” to unnamed module
翻译:”base 模块中没将 lang 模块打包到未命名模块。

JDK17中把 accessiable 属性设置为 false 了。
在 JDK1.8 及之前,这个属性是打开的,意思就是 1.8 前会反射出里面的所有方法。我们都知道反射会消耗性能。然而这些方法的使用频率不高,为了这些比较少调用的代码牺牲这些性能不值得,所以从 JDK1.8 后大量包的可访问反射属性都被关闭了,lang 就是其中之一。

解决方法:
启动项目时,添加JVM参数:

--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED

亲测有效。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐