JDK版本特性

目录

一、名词说明

1.1 LTS版本

1.2属于LTS的JDK版本

二、JDK各版本特性

2.1 JDK8(2014-03, LTS)

2.2 JDK9(2017-09)

2.3 JDK10(2018-03)

2.4 JDK11(2018-09, LTS)

2.5 JDK12(2019-03)

2.6 JDK13(2019-09)

2.7 JDK14(2020-03)

2.8 JDK15(2020-09)

2.9 JDK16(2021-03)

2.10 JDK17(2021-09, LTS)

2.11 JDK18(2022-03)

2.12 JDK19(2022-09)

2.13 JDK20(2023-03)

2.14 JDK21 (2023-09, LTS)

2.15 JDK22 (2024-03)

三、相关文献

3.1 Java中JDK8、JDK11、JDK17,该怎么选择?

3.2 JDK各版本文档以及迁移说明

3.3 Oracle Java SE支持路线图|Oracle 中国

一、名词说明

1.1 LTS版本

LTS,原名 Long-Term Support 长期支持,正常情况下 当 JDK 12 正式发布后 JDK 11 将失效,但是由于 JDK 11 是 LTS 版本,所以会延长支持更新至 2032 年。

LTS 版本更加注重稳定性,安全性,性能改进,默认支持是 8 年,其中 JDK 8 延长至 2030 年(16年),延长支持期间不再提供新的功能。

LTS 版本自 2021 年起,从 3 年发布一次更改为 2 年一次

1.2属于LTS的JDK版本

JDK8, JDK11, JDK17, JDK21

二、JDK各版本特性

2.1 JDK8(2014-03, LTS)

  1. 接口默认方法

允许在接口中定义默认实现。

  1. lambda表达式

引入了函数式编程的特性,使得代码更加简洁和灵活。

  1. 函数式接口
  2. streamAPI
  3. 新的日期工具类
  4. Nashorn JavaScript 引擎

一个新的轻量级 JavaScript 运行时,允许在 JVM 上执行 JavaScript 代码。

  1. 性能改进

JDK 8 在垃圾回收器和 JIT 编译器方面进行了优化,提高了性能。

2.2 JDK9(2017-09)

主要:是API的优化,如支持HTTP2的Client API、JVM采用G1为默认垃圾收集器。

  1. 模块化

即只加载应用运行需要的模块

  1. JShell

一个新的交互式命令行工具,允许开发者逐行执行 Java 代码,并立即看到结果。

  1. 改进的Java doc
    生成的Java doc符合H5标准,支持API搜索
  2. HTTP/2
    新的方式处理HTTP调用,用于替换 HttpURLConnection,并提供对WebSocket和HTTP/2的支持。
  3. 改进的 Stream API

增加了新的中间操作和终端操作,使得 Stream API 更加强大。

  1. 集合工厂方法

在 java.util.Collections 中增加了一些新的静态工厂方法,用于创建不可修改的集合。

  1. 处理进程

引入了 java.lang.ProcessHandle 类,提供了对操作系统进程的更细粒度控制。

2.3 JDK10(2018-03)

主要:通过var关键字实现局部变量类型推断,使Java语言变成弱类型语言、JVM的G1垃圾回收由单线程改成多线程并行处理,降低G1的停顿时间。

  1. 改进的垃圾回收器
    并行full gc的G1,通过并行Full GC, 改善G1的延迟。目前对G1的full GC的实现采用了单线程-清除-压缩算法。JDK10开始使用并行化-清除-压缩算法。
  2. 基于实验Java的JIT编译器
    启用基于Java的JIT编译器Graal,它是JDK9中引入的Ahead-of-time(AOT)编译器的基础。
  3. 局部变量类型推断

在 JDK 10 中,局部变量的类型推断(var 关键字)被引入,这使得代码更加简洁。

  1. HTTP 客户端 API

提供了一个新的 HTTP 客户端 API,用于简化 HTTP 请求的发送和处理。

2.4 JDK11(2018-09, LTS)

主要:对于JDK9和JDK10的完善,主要是对于Stream、集合等API的增强、新增ZGC垃圾收集器。

  1. HttpClient增强
    同时提供了同步调用和异步调用实现。JDK对http对调用支持已经足够强,以前apache提供的httpComponents基本可以去除了。
  2. ZGC
    JDK11最瞩目的特性,但目前是实验性质的。目标是GC暂停时间不会超过10ms,既能处理几百兆的小堆,也能处理几个T的大堆。
  3. 完全支持Linux容器
    JDK10开始,JVM可以识别当前是否在容器中运行,能接受容器设置的内存限制和CPU限制。
  4. Flight Recorder

引入了 Flight Recorder,这是一个低开销的事件记录系统,用于监控和诊断 JVM 的性能问题。

  1. Epsilon 垃圾回收器

作为一个实验性的垃圾回收器,Epsilon GC 旨在为某些特定的应用场景提供更好的性能。

  1. 改进的 AArch64(ARM64)支持

JDK 11 对 ARM64 架构提供了更好的支持,使得 Java 应用程序可以在更多的设备上运行。

  1. 移除 Nashorn 引擎和 CORBA 模块

这两个特性在 JDK 11 中被移除,以减少 JDK 的体积和复杂性。

2.5 JDK12(2019-03)

主要:switch表达式语法扩展、G1收集器优化、新增Shenandoah GC垃圾回收算法。

  1. 优化swich使用

2.6 JDK13(2019-09)

主要:ZGC优化,释放内存还给操作系统、socket底层实现引入NIO。

  1. 优化字符串拼接
  2. 优化Socket API

2.7 JDK14(2020-03)

  1. gc相关

删除CMS;弃用 ParallelScavenge + SerialOld GC 的垃圾回收算法组合;将 zgc 垃圾回收器移植到 macOS 和 windows 平台。

  1. instanceof扩展
  2. NullPointerException打印信息增强,定位错误

2.8 JDK15(2020-09)

  1. RMI Actiation被标记为Deprecate,在JDK17中删除。

RMI远程方法调用,在JDK1.2中引入,为分布式提供延迟加载方式,已被web服务器替代。

  1. JEP 339 Edwards-Curve Digital Signature Algorithm (EdDSA)
    实现了EdDSA椭圆曲线签名算法。
  2. JEP 384 Records (Second Preview)
    引入了Record类型,解决定义大量get/set方法的问题,可一定程度替代掉lomobok
  3. 移除Nashorn JavaScipt引擎

2.9 JDK16(2021-03)

  1. 387: 弹性Metaspace功能可将未使用的HotSpot虚拟机的Class Metadata(Metaspace)占用的内存更迅速的返回给操作系统,从而减少Metaspace的占用并简化Metaspace的代码以降低维护成本。
  2. 388: 将JDK移植到Windows/AArch64平台。
  3. 392: 提供用于打包独立的Java应用程序的jpackage工具。

2.10 JDK17(2021-09, LTS)

主要:对前几个版本的整合和完善。Spring 6和SpringBoot3需要JDK17。

  1. JDK 内部的强封装,除了sun.misc.Unsafe等关键的内部 API 外,用户将不再可能通过单个命令行选项来 relax 对内部元素的强封装,这在 JDK 9 到 JDK 16 中是可行的。该计划的目标包括提高 JDK 的安全性和可维护性,并鼓励开发人员从内部元素迁移到标准 API。
  2. 删除远程方法调用 (RMI) 激活机制,同时保留 RMI 的其余部分。
  3. 删除实验性 AOT 和 JIT 编译器,它们几乎没有使用,但需要大量维护工作。该计划要求维护 Java 级别的 JVM 编译器接口,以便开发人员可以继续使用外部构建的编译器版本进行 JIT 编译。
  4. 将 JDK 移植到 MacOS/AArch64 以响应 Apple 将其 Macintosh 计算机从 x64 转换到 AArch64 的计划(Apple M1处理器)。针对 MacOS/AArch64 的更改有可能破坏现有的 Linux/AArch64、Windows/AArch64 和 MacOS/x64 port,但这种风险可通过预集成测试来降低。
  5. 弃用 Applet API 以进行删除。这个 API 本质上是无关紧要的,因为所有 Web 浏览器供应商要么已经取消了对 Java 浏览器插件的支持,要么已经宣布了这样做的计划。Applet API 之前在 2017 年 9 月的 Java 9 中已被弃用,但并未删除。Applet API彻底被删除,最早java就是靠applet开始火的。
  6. 弃用 Security Manager,准备在未来版本中移除。追溯到 Java 1.0,Security Manager 一直是保护客户端 Java 代码的主要手段,很少用于保护服务器端代码。该提案的一个目标是评估是否需要新的 API 或机制来解决使用 Security Manager 的特定狭窄用例,例如阻塞System::exit。计划要求弃用 Security Manager 以与旧 Applet API 一起删除,该 API 也计划在 JDK 17 中弃用。

2.11 JDK18(2022-03)

  1. Javadoc中支持代码片段

从JDK18开始,可以使用@snippet来生成注释,且可以高亮某个代码片段

  1. 默认UTF-8字符编码
  2. 简单的Web服务器

JDK18中提供了一个新命令jwebserver, 运行这个命令可以启动一个简单的,最小化的静态web服务器,默认发布的是当前目录

  1. 使用方法句柄重新实现反射核心功能
    JDK18改进了java.lang.reflect.Method, Constructor的实现逻辑,使得性能更佳。 不涉及到API的变动,只要升级到该版本,就能享受到更好的性能。
  2. 互联网地址解析 SPI
    对于互联网地址解析 SPI,为主机地址和域名地址解析定义一个 SPI,以便 java.net.InetAddress 可以使用平台内置解析器以外的解析器。

2.12 JDK19(2022-09)

  1. 405: Record记录模式(预览)
  2. 422: Linux/RISC-V 端口
  3. 424: 外部函数和内存 API(预览版)
  4. 425: 虚拟线程(预览)
  5. 426: Vector API(第四孵化器)
  6. 427: 开关的模式匹配(第三次预览)
  7. 428: 结构化并发(孵化器)

2.13 JDK20(2023-03)

  1. 429:Scoped Values范围值(孵化器)
  2. 432:Record记录模式(第二次预览)
  3. 433:开关的模式匹配(第四次预览)
  4. 434:外部函数和内存 API(第二预览版)
  5. 436:虚拟线程(第二预览版)
  6. 437:结构化并发(第二个孵化器)
  7. 438:Vector API(第五孵化器)

2.14 JDK21 (2023-09, LTS)

  1. 430: 字符串模板(预览)
  2. 431: 有序集合
  3. 439: 世代ZGC
  4. 440: 记录模式
  5. 441: 开关的模式匹配
  6. 442: 外部函数和内存 API(第三次预览版)
  7. 443: 未命名模式和变量(预览)
  8. 444: 虚拟线程
  9. 445: 未命名类和实例主要方法(预览)
  10. 446: 范围值(预览)
  11. 448: Vector API(第六个孵化器)
  12. 449: 弃用 Windows 32 位 x86 端口以进行删除
  13. 451: 准备禁止动态加载代理
  14. 452: 密钥封装机制API
  15. 453: 结构化并发(预览版)

2.15 JDK22 (2024-03)

  1. 423: G1 的区域固定
  2. 447: super(…) 之前的语句(预览)
  3. 454: 外部函数和内存 API
  4. 456: 未命名变量和模式
  5. 457: 类文件 API(预览版)
  6. 458: 启动多文件源代码程序
  7. 459: 字符串模板(第二次预览)
  8. 460: Vector API(第七个孵化器)
  9. 461: 流收集器(预览)
  10. 462: 结构化并发(第二预览版)
  11. 463: 隐式声明的类和实例主要方法(第二预览版)
  12. 464: 范围值(第二次预览版)

三、相关文献

3.1 Java中JDK8、JDK11、JDK17,该怎么选择?

Java中JDK8、JDK11、JDK17,该怎么选择?-腾讯云开发者社区-腾讯云

3.2 JDK各版本文档以及迁移说明

Java Platform, Standard Edition Documentation - Releases

3.3 Oracle Java SE支持路线图|Oracle 中国

Oracle Java SE Support Roadmap | Oracle 中国

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值