首页 > 其他分享 >jdk的新特征

jdk的新特征

时间:2023-07-14 11:25:56浏览次数:28  
标签:jdk JDK 特征 Spring 升级 Framework GC log4j

jdk11新特征:

 

https://my.oschina.net/u/4662964/blog/5783779

 

依赖升级: 

在 JDK8 中 JavaSE 和 JavaEE 有很多共享代码,但是 JDK11 中这两部分独立了,JavaEE 相关模块被移除,无法编译,因此需要添加包括这些包的第三方依赖

如:编译时 @Resource/@PostConstruct 等注解找不到,需要显式引入 javax.annotation

 
<dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>1.3.2</version>
    </dependency>

maven升级

  1. 升级 maven 至推荐版本 3.5.0 (release)
  2. 升级 maven-compiler-plugin 到 3.8.0 以上,同时指定编译的目标文件和源文件的编译版本
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
      <source>11</source>
      <target>11</target>
    </configuration>
</plugin>

 

spring升级

由于 Spring 4.x 最多只支持到 JDK 8,因此若要升级 JDK 11,建议同时升级 Spring 至 5.x 版本

附 Spring 各版本支持的 JDK 版本范围

Spring Framework 6.0.x: JDK 17-21 (expected)

Spring Framework 5.3.x: JDK 8-19 (expected)

Spring Framework 5.2.x: JDK 8-15

Spring Framework 5.1.x: JDK 8-12

Spring Framework 5.0.x: JDK 8-10

Spring Framework 4.3.x: JDK 6-8

 

废弃了 ref load 标签

spring 5.2.0 无法扫描非Runtime 注解

问题:线上压测时发现 某个二方库的本地缓存失效,导致下游依赖 QPS 大幅上涨。



原因:Spring 5.2.x 只能找到 @Retention (RetentionPolicy.RUNTIME) 的自定义注解,应用依赖的二方库中有非 RUNTIME 的注解,
因此与 5.2.x 及以上版本不兼容。导致依赖注解扫描加载的富客户端本地缓存代理类 无法被加载,缓存失效,才会导致大量请求打到远端服务。

 

log4j 的兼容、升级

两种解决方案:
升级 Log4j2(推荐)
手动使 Spring 5.x 兼容 Log4j 1.x,建议仅在依赖二方包无法平滑迁移 Log4j 2 情况下使用(不推荐)

升级 Log4j 2.x

  1. Log4j 官方提供了 bridge 包进行平滑迁移,无需代码改动。但无法兼容编程配置方式、也无法支持访问 log4j 内部实现。
  2. slf4j 版本 和 log4j-slf4j-impl 版本需要同步
    log4j-slf4j-impl should be used with SLF4J 1.7.x releases or older.log4j-slf4j18-impl should be used with SLF4J 1.8.x releases or newer. ref
  1. log4j 2 不支持 Servlet 2.4 ref , 需要升级到 Servlet 3.0。

兼容 Log4j 1.x

 

若依赖的二方库使用 Log4j 1.x 导致应用无法通过官方适配包平滑迁移到 Log4j2,可以自行实现 Log4jConfigListener 初始化 log4j,使 Spring 5.x 兼容 Log4j1.x

验证日志是否正确输出时需要注意,相比于 Spring 4.x,Spring 5.x 部分日志级别有所调整。

 

Log4jConfigListener 实现参考:(见文末附录)

 

 

 GC 升级

JDK11 在 GC 上有一些值得注意的变化,包括:
默认 GC 由 CMS 换成 G1
废弃了多种 GC 组合 和 GC 参数。
所有 GC 策略 GC log 打印出的文本格式发生了变化,和 JDK8 不兼容。
  • GC 参数

GC log 参数改变JDK11 中打印 GC log 的参数有所变化
  1. -Xloggc:<logfile> 改为 - Xlog:gc:<logfile>
  2. JDK11 中不再支持 -XX:+PrintGCDetails,PrintGCDateStamps

    若使用了 -XX:+PrintGCDetails,将 - Xlog:gc:<logfile> 改成 - Xlog:gc*:<logfile>.若使用 -XX:+PrintGCDateStamps,在 - Xlog:gc:<logfile> 后面添加:time,即修改为 - Xlog:gc:<logfile>:time.
废弃 GC 参数具体废弃参数可参考:https://www.oracle.com/java/technologies/javase/9-removed-features.html

  • GC 算法升级

G1 和 ZGC 的特点及适用场景见后文新特性中关于 GC  的介绍

 

 

配置调优参数

G1 配置和调优参数可参考:https://www.oracle.com/technical-resources/articles/java/g1gc.html

ZGC 配置参数

-XX:+UnlockExperimentalVMOptions 
-XX:+UseZGC
具体调优参数参考:https://docs.oracle.com/en/java/javase/11/gctuning/z-garbage-collector1.html#GUID-A5A42691-095E-47BA-B6DC-FB4E5FAA43D0


应用升级后单机 GC 性能压测表现


日常水位 GC 统计数据

 

 

 JDK 11 + ZGC 压测时,在 400 QPS 时 RT 和 CPU 开始不正常飙高,经分析 ZGC 由于不分代,适合老年代对象较少的场景,而本应用有大量常驻内存的对象,所以不适合使用 ZGC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:jdk,JDK,特征,Spring,升级,Framework,GC,log4j
From: https://www.cnblogs.com/yishuo/p/17553178.html

相关文章

  • 详解在Linux中修改Tomcat使用的jdk版本
    问题分析由于部署个人项目使用了openjdk11,但是我之前安装的是jdk1.8,jdk版本升级的后果就是,tomcat运行的时候报一点小bug(因为之前安装tomcat默认使用了系统的jdk版本)所以就想着把tomcat使用的jdk版本调回原来的,找了很多资料之后,决定在tomcat的运行文件中覆盖使用的jdk版本路径......
  • javaJDK8时间类1之ZoneId时区
    一:ZoneId的介绍ZoneId用于标识用于在Instant和LocalDateTime之间进行转换的规则。ID有两种不同的类型:•固定的偏移量-相对于UTC/格林威治标准时间的完全解析的偏移量,它对所有本地日期时间都使用相同的偏移量•地理区域-适用于查找与UTC/格林威治的偏移量的一组特定规则的区域大多......
  • 爬取 2 万多张 Flickr 图片,莫纳什大学复现 10 年间日本樱花开放的时空特征
    内容一览:近年来,全球气候变化形势严峻,由此引发的蝴蝶效应,正深刻地影响着人类和大自然。在这一背景下,收集数百甚至数千公里范围内开花模式的数据,了解气候变化如何对开花植物产生影响,成为近年来生态研究的重要课题之一。但传统的方法通常需要耗费大量经费,且需要较长的时间进行采样调查......
  • java JDK安装及配置
    javaJDK安装及配置windows11jdk-8u261-windows-x64.exe1、点击安装,一路默认即可2、设置系统环境变量新建JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径C:\ProgramFiles\Java\jdk1.8.0_261,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等......
  • 4. 特征提取
    小明是一名算法工程师,同时也是一名铲屎官。某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。一个猫咪特征是一个两维的vector<x,y>。如果x_1=x_2andy_1=y_2,那么这俩是同一个特征。因此,如果喵咪特征连续一致,可......
  • 【1】 android jdk环境安装和 开发工具androidStudio 安装[ mac+windows版本]
    工具jdk1.8 +as3.1.4jdk安装mac安装jdk tp windows安装jdk 一、下载:        http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html      我的电脑是64位的,所以下载版本是jdk-8u121-windows-x64.exe二、安装:     ......
  • jdk1.8新特性
    1.default关键字在jdk8之前,接口里面只能包含抽象方法,但是jdk8之后,允许使用default修饰的默认方法。publicinterfaceNewCharacter{publicvoidtest1();publicdefaultvoidtest2(){System.out.println("我是新特性1");}}default作用......
  • centos7 安装jdk8
    前言记录centso7安装jdk8的过程yum安装jdk8检查jdk是否安装(存在卸载对应包)rpm-qa|grepjdk查找安装包yumsearchjava-1.8通过命令安装(可根据上面搜索结果指定版本)yum-yinstalljava-1.8.0-openjdk-devel.x86_64查看版本java-version安装完成,路径一般在/usr/li......
  • 各类漏洞以及工具特征
    springboot未授权访问1、http头部中不包括Cookie、Authorization等会话信息2、访问SpringBoot服务的URL或响应内容类型包括spring-boot特征 菜刀特征1.请求体中存在eval,base64等特征字符2.请求体中传递的payload为base64编码,并存在固定的QGluaV9zZXQoImRpc3BsYXlfZXJyb3J......
  • 如何安装JDK详细过程
    卸载JDK删除java的安装目录删除JAVA-HOME删除path下关于java的目录用java-version进行验证安装JDK百度搜索JDK8,找到下载地址同意协议下载电脑对应版本双击安装JDK记住安装的路径配置环境变量我的电脑-->右键-->属性环境变量-->JAVA-HOM......