jdk 的升级速度还是挺快的,但是大部分为了求稳(也可能只是怕麻烦)都只停留在 8 的阶段,下面分享下 8->11
需要注意的地方。
一、JDK选择
1.1 Oracle's OpenJDK vs AdoptOpenJDK
Oracle's OpenJDK 与 AdoptOpenJDK 都是对 OpenJDK 项目的源码进行 build 之后的产物,但 AdoptOpenJDK 会提供更长的更新服务,而 Oracle's OpenJDK只提供六个月的更新服务。因此建议使用 AdoptOpenJDK,而不是Oracle's OpenJDK。
1.2 JVM版本
AdoptOpenJDK目前可以选择的JVM有两种。一种是原有的 hotspot,另一种是 IBM 开源的 openj9。
openj9 占用的内存更少,但 CPU 密集任务方面不如 hotspot,就目前而言,一般开发与生产环境还是推荐 hotspot。
如下是现在网址:https://adoptium.net/releases.html?variant=openjdk11
如非必须:建议升级到最新版本
二、排查模块化后问题
使用jdk11自带工具jdeps -jdkinternals进行依赖关系排查,解决相关问题。
更多用法: https://docs.oracle.com/en/java/javase/11/tools/jdeps.html#GUID-A543FEBE-908A-49BF-996C-39499367ADB4
示例:
注意:红圈中的类型一定要修改(属于下面描述的第三种)
需要注意必须修改的三种类型:
- Obsolete Java Options: 参数可以被接受但是忽略掉了,但是会有警告,一般这种参数有替代写法,请用替代的写法
- Deprecated Java Options: 参数可以被接受并有效,但是会有警告,一般这种参数有替代写法,请用替代的写法
- Removed Java Options: 参数被移除,并且使用的话会有报错
在JDK 11中,删除了Java EE和CORBA模块。不推荐在JDK 9中删除这些模块。
删除的模块是:
- java.xml.ws:用于XML Web服务的Java API(JAX-WS),用于Java平台的Web服务元数据以及用于Java的附件的SOAP(SAAJ)
- java.xml.bind:用于XML绑定的Java体系结构(JAXB)
- java.xml.ws.annotation:Java SE定义的JSR-250 Common Annotations的子集,用于支持Web服务
- java.corba:CORBA
- java.transaction:Java SE定义的Java Transaction API的子集,用于支持CORBA对象事务服务
- java.activation:JavaBeans Activation Framework
- java.se.ee:上面六个模块的聚合器模块
- jdk.xml.ws:JAX-WS的工具
- jdk.xml.bind:JAXB的工具
如下类似警告一定要修复
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by jnr.posix.JavaLibCHelper (file:/C:/Jython/jython2.7.0/jython-standalone-2.7.0.jar) to method sun.nio.ch.SelChImpl.getFD()
WARNING: Please consider reporting this to the maintainers of jnr.posix.JavaLibCHelper
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
三、JVM配置
- JVM日志配置
-Xlog:all=warning:file=/usr/local/logs/jvm.log:uptime,level,tags:filecount=25,filesize=100M
- 动态修改JVM日志配置
jcmd + 进程ID +VM.log +子命令,可以实现动态修改jvm log
- JVM配置
-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:InitialRAMPercentage=75.0 -XX:MinRAMPercentage=75.0 -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/appuser/gc.hprof -Djava.io.tmpdir=/home/appuser/java_tmp -XX:+DisableExplicitGC
G1作为默认官方收集器,官方推荐使用默认设置,如果需要调整要结合GC日志进行分析调整。
四、依赖包升级列表
下面是我司 JDK 升级实践中需要修改到的依赖包列表
四、参考文章
https://docs.oracle.com/en/java/javase/11/migrate/index.html#JSMIG-GUID-C25E2B1D-6C24-4403-8540-CFEA875B994A
https://skywalking.apache.org/docs/main/v8.4.0/en/setup/service-agent/java-agent/readme/
发表评论 取消回复