配置版本什么意思_idea配置jdk版本_奥迪a4l有几个配置版本

导读

本文记录了作者从JDK8升级到11的实践过程和升级后的效果以及JDK11新玩法。

一、背景

为什么要升级JDK11

奥迪a4l有几个配置版本_idea配置jdk版本_配置版本什么意思

必然趋势

奥迪a4l有几个配置版本_配置版本什么意思_idea配置jdk版本

二、升级前你要知道的点

三、升级过程

本地升级,让你的JDK11跑起来

这里不过多阐述,需要注意区分JDK的arm版本与x64版本。

配置版本什么意思_奥迪a4l有几个配置版本_idea配置jdk版本

修改pom文件

11
11
11
2.1.6.RELEASE
1.18.12

软件

最低版本

spring-boot

2.1.x 开始支持jdk11

spring

5.1.x

idea

2018.2

maven

3.5.0

lombok

1.18.x

netty

需要升级到 4.1.33.Final 或之后的版本,否则会引起堆外内存增长

apache common lang3

3.12.0

jdk11已移除,需手工依赖二方库


    javax.xml.soap
    javax.xml.soap-api
    1.4.0


    com.sun.xml.ws
    jaxws-ri
    2.3.3
    pom


    com.sun.xml.bind
    jaxb-impl
    2.3.0


    javax.xml.bind
    jaxb-api
    2.3.0


    javax.annotation
    javax.annotation-api
    1.3.2


    com.sun.activation
    javax.activation
    1.2.0


    com.sun.xml.bind
    jaxb-core
    2.3.0


    com.alibaba.jvm
    java-migration-jdk-patch
    0.3.1
    pom


    javax.transaction
    javax.transaction-api
    1.2

Deprecated: A global security auto-configuration is now provided

idea配置jdk版本_配置版本什么意思_奥迪a4l有几个配置版本

在Spring Boot 2.0及以上版本中,这个配置项已经被废弃并移除。如果你要关闭端点的安全性,需要在Spring Security的配置中对Actuator端点进行配置。该配置项是默认开启安全检测。

Dependency 'org.hibernate:hibernate-validator:' not found

需要指定版本号


    org.hibernate
    hibernate-validator
    6.2.4.Final

应用不能进行远程调试

原因分析

JDK 8 中 jdwp 默认绑定的 host/ip 是 0.0.0.0,初于安全考虑在 JDK 9 后改成了 localhost(127.0.0.1),导出如果开发者在配置调试选项时只指定端口时,在升级后无法进行远程调试。

解决方案

指定调试选项时设置 host/ip 为 *,如:

agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000

或者 0.0.0.0,如:

agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:8000

其他问题

1、maven-compiler-plugin:此插件建议直接升级到最新版,同时在父Pom和每个你需要额外确定版本的包(比如说打给别人用的JDK8版本的包)里的Pom,指定版本:

11 11

2、Springboot和Spring版本:Spring从5.1开始支持11,Springboot从2.1.X开始支持11,我们的推荐是支持升级到当前的最新版;

3、Netty因为堆外内存的释放问题,请升级到4.1.33以上的版本;

4、lombok因为会在编译期插入自己的编译逻辑,所以升级到11之后,需要将lombok升级到最新版,(编辑文档时的最新版本是1.18.24);

5、可能大部分应用都需要进行Spring或者Springboot升级,请务必做好回归;

6、security-spring-boot-starter分为1.x.x和2.x.x版本,对应springboot1和springboot2,请升级到2.x.x版本;

应用部署发布

去除
#SERVICE_OPTS="${SERVICE_OPTS} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=5000"
#SERVICE_OPTS="${SERVICE_OPTS} -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly"
#SERVICE_OPTS="${SERVICE_OPTS} -XX:+ExplicitGCInvokesConcurrent -Dsun.rmi.dgc.server.gcInterval=2592000000 -Dsun.rmi.dgc.client.gcInterval=2592000000"
#SERVICE_OPTS="${SERVICE_OPTS} -XX:ParallelGCThreads=4"
#SERVICE_OPTS="${SERVICE_OPTS} -Xloggc:${MIDDLEWARE_LOGS}/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
SERVICE_OPTS="${SERVICE_OPTS} -XX:+UseG1GC -XX:+UseVtableBasedCHA -XX:+UseCompactObjectHeaders"
SERVICE_OPTS="${SERVICE_OPTS} -XX:G1HeapRegionSize=8m"
SERVICE_OPTS="${SERVICE_OPTS} -XX:+G1BarrierSkipDCQ"
SERVICE_OPTS="${SERVICE_OPTS} -Xlog:gc*:/home/admin/logs/gc.log:time"
SERVICE_OPTS="${SERVICE_OPTS} -XX:G1HeapWastePercent=2"
SERVICE_OPTS="${SERVICE_OPTS} -XX:+ExplicitGCInvokesConcurrent -Dsun.rmi.dgc.server.gcInterval=2592000000 -Dsun.rmi.dgc.client.gcInterval=2592000000"
if [ -n "$AJDK_MAX_PROCESSORS_LIMIT" ]; then
    SERVICE_OPTS="${SERVICE_OPTS} -XX:ActiveProcessorCount=$AJDK_MAX_PROCESSORS_LIMIT"
fi

GC调优的注意事项(数据来源JVM团队)

通常G1 GC是一个免调参的GC,并不需要额外的参数调整。老的一些的八股文Java GC调参经验并不适用。

-Xmn参数一般不需要设置

G1预设了-XX:NewSize和-XX:MaxNewSize的值(不一致),会根据实际运行来计算设置每次GC的young区的size,实现GC暂停的软可控。

-XX:NewRatio同理不需要设置-XX:SurvivorRatio一般也不设置

通常绝大部分使用者并不清楚这个参数的含义以及对GC带来的影响,G1会自适应处理这个参数相关的GC行为。

升级G1后可能需要关注的参数-XX:MaxGCPauseMillis=N,G1暂停的目标时间(毫秒)

默认为200,很多用户会刻意设小,通常情况下意义不大。G1实际的GC暂停任务,并不会随着暂停时间缩小而变少,可以设小会导致更频繁的GC影响吞吐。一般不需要设置,如果需要更好的吞吐,通常是设置更大,保持young区不会缩减的太小。也可以咨询JVM答疑专家考虑调整-XX:NewSize和-XX:MaxNewSize,来保持young 区的Size,维持合适的吞吐性能。

-XX:InitiatingHeapOccupancyPercent=N -XX:-G1UseAdaptiveIHOP (电商核心使用)

这两个参数通常同时使用。JDK11引入了G1UseAdaptiveIHOP来提升老区的利用率(大堆,通常大几十G,或者100G以上)。在我们容器规格中等规模的heap(通常5-20g)的size中,有时会出现old gc过于频繁或者young gc过于频繁的现象。因此考虑一个合适的静态IHOP(老区使用占全堆比例触发GC的阈值),会更加合适。

-XX:G1HeapRegionSize,(电商核心通常使用8m-32m)

设置G1 region的大小,应对humongous对象(超过heap region size一半独占一个或多个region)引起的GC异常。Heap region size默认为Heap size/2048,如果默认值过小,humongous对象分配过多,容易引起To-space exhausted的异常暂停时间:

本网站每日更新互联网创业教程,一年会员只需98,全站资源免费下载点击查看会员权益

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注