实践
前言
工作中,难免会遇到升级版本的事情。这次由于两个系统中,系统 A 是用的 JDK8 版本,系统 B 是用 JDK11 版本;要求同步 JDK 版本,也就是升级到11版本。那么接下来将进行介绍~
问题与解决
1. .sh 脚本启动无法启动问题
发现的问题
由于脚本改动并没有什么变化,启动 jdk8 不存在问题能启动成功,启动 jdk11 却无法启动。
JVM 参数 -XX:PermSize、参数 -XX:MaxPermSize、参数 -XX:+PrintGCDateStamps
导致的原因
(1) JDK 11 已经
弃用
了-XX:PermSize
参数和-XX:MaxPermSize
参数,从而会存在导致启动失败。 (这两个参数在 JDK 8 及之前版本被用来设置永久代内存的初始大小和最大大小。)
(2)-XX:+PrintGCDateStamps
这个参数在 JDK 8 和 JDK 9 中都是支持的,但在之前的版本中可能会出现不支持的情况。(注:是-XX:+PrintGCDateStamps
不是PrintGCDetails
)
解决的办法
(1) ① 去掉
-XX:PermSize
参数和-XX:MaxPermSize
参数。
② 在 JDK 11 上使用-XX:MetaspaceSize
参数和-XX:MaxMetaspaceSize
代替-XX:PermSize
参数和-XX:MaxPermSize
参数.
(注:JDK 11 中-XX:MetaspaceSize
参数和-XX:MaxMetaspaceSize
参数是设置元空间内存的大小。)
(2) 去掉-XX:+PrintGCDateStamps
这个参数。
2. javafx.util.Pair 替换
发现的问题
启动项目的时候,出现
Error:(27, 19) java: 程序包javafx.util.Pair不存在
。
导致的原因
JDK 11
已经没有内嵌javafx
。
解决的办法
(1) 如果是只有使用
javafx.util.Pair
,可以用其他引入的依赖去代替。(如cn.hutool.core.lang.Pair
等其他)
(2) 项目引入 JavaFX 的相关依赖。
【引入 JavaFX 的相关依赖】(点击展开)
3. sun.misc.BASE64Decoder 替换
发现的问题
启动项目的时候,出现
Error:(5, 16) java: 程序包sun.misc不存在
。
导致的原因
JDK 9
之后已经删除和弃用sun.misc
。
解决的办法
(1) 如果是需要替换
sun.misc.BASE64Decoder
,可以考虑java.util.Base64
代替掉sun.misc.BASE64Encoder
和sun.misc.BASE64Decoder
。
【sun.misc.BASE64Decoder 替换 java.util.Base64 实例】(点击展开)
要点
【要点】(点击展开)
总结
本篇文章介绍了, jdk8 升级 jdk11 的一些注意问题。主要围绕-
- .sh 脚本启动无法启动问题
- javafx.util.Pair 替换
- sun.misc.BASE64Decoder 替换
- ... (后续碰到会持续更新)
(主要要点:)