名词说明
LTS版本是什么意思
LTS,原名 Long-Term Support 长期支持,正常情况下 当 JDK 12 正式发布后 JDK 11 将失效,但是由于 JDK 11 是 LTS 版本,所以会延长支持更新至 2032 年。
LTS 版本更加注重稳定性,安全性,性能改进,默认支持是 8 年,其中 JDK 8 延长至 2030 年(16年),延长支持期间不再提供新的功能。
LTS 版本自 2021 年起,从 3 年发布一次更改为 2 年一次
属于LTS的JDK版本
JDK8, JDK11, JDK17, JDK21
JDK各版本特性
1、JDK8(2014-03, LTS)
- 接口默认方法:允许在接口中定义默认实现。
- lambda表达式:引入了函数式编程的特性,使得代码更加简洁和灵活。
- 函数式接口
- streamAPI
- 新的日期工具类
- Nashorn JavaScript 引擎:一个新的轻量级 JavaScript 运行时,允许在 JVM 上执行 JavaScript 代码。
- 性能改进:JDK 8 在垃圾回收器和 JIT 编译器方面进行了优化,提高了性能。
————————————————
2、JDK9(2017-09)
主要:是API的优化,如支持HTTP2的Client API、JVM采用G1为默认垃圾收集器。
- 模块化:即只加载应用运行需要的模块
- JShell:一个新的交互式命令行工具,允许开发者逐行执行 Java 代码,并立即看到结果。
- 改进的Java doc:生成的Java doc符合H5标准,支持API搜索
- HTTP/2:新的方式处理HTTP调用,用于替换 HttpURLConnection,并提供对WebSocket和HTTP/2的支持。
- 改进的 Stream API:增加了新的中间操作和终端操作,使得 Stream API 更加强大。
- 集合工厂方法:在 java.util.Collections 中增加了一些新的静态工厂方法,用于创建不可修改的集合。
- 处理进程:引入了 java.lang.ProcessHandle 类,提供了对操作系统进程的更细粒度控制。
————————————————
3、JDK10(2018-03)
主要:通过var关键字实现局部变量类型推断,使Java语言变成弱类型语言、JVM的G1垃圾回收由单线程改成多线程并行处理,降低G1的停顿时间。
- 改进的垃圾回收器:并行full gc的G1,通过并行Full GC, 改善G1的延迟。目前对G1的full GC的实现采用了单线程-清除-压缩算法。JDK10开始使用并行化-清除-压缩算法。
- 基于实验Java的JIT编译器:启用基于Java的JIT编译器Graal,它是JDK9中引入的Ahead-of-time(AOT)编译器的基础。
- 局部变量类型推断:在 JDK 10 中,局部变量的类型推断(var 关键字)被引入,这使得代码更加简洁。
- HTTP 客户端 API:提供了一个新的 HTTP 客户端 API,用于简化 HTTP 请求的发送和处理。
————————————————
4、JDK11(2018-09, LTS)
主要:对于JDK9和JDK10的完善,主要是对于Stream、集合等API的增强、新增ZGC垃圾收集器。
- HttpClient增强:同时提供了同步调用和异步调用实现。JDK对http对调用支持已经足够强,以前apache提供的httpComponents基本可以去除了。
- ZGC:JDK11最瞩目的特性,但目前是实验性质的。目标是GC暂停时间不会超过10ms,既能处理几百兆的小堆,也能处理几个T的大堆。
- 完全支持Linux容器:JDK10开始,JVM可以识别当前是否在容器中运行,能接受容器设置的内存限制和CPU限制。
- Flight Recorder:引入了 Flight Recorder,这是一个低开销的事件记录系统,用于监控和诊断 JVM 的性能问题。
- Epsilon 垃圾回收器:作为一个实验性的垃圾回收器,Epsilon GC 旨在为某些特定的应用场景提供更好的性能。
- 改进的 AArch64(ARM64)支持:JDK 11 对 ARM64 架构提供了更好的支持,使得 Java 应用程序可以在更多的设备上运行。
- 移除 Nashorn 引擎和 CORBA 模块:这两个特性在 JDK 11 中被移除,以减少 JDK 的体积和复杂性。
————————————————
5、JDK12(2019-03)
主要:switch表达式语法扩展、G1收集器优化、新增Shenandoah GC垃圾回收算法。
优化swich使用
————————————————
6、JDK13(2019-09)
主要:ZGC优化,释放内存还给操作系统、socket底层实现引入NIO。
- 优化字符串拼接
- 优化Socket API
————————————————
7、JDK14(2020-03)
- gc相关:删除CMS;弃用 ParallelScavenge + SerialOld GC 的垃圾回收算法组合;将 zgc 垃圾回收器移植到 macOS 和 windows 平台。
- instanceof扩展
- NullPointerException打印信息增强,定位错误
————————————————
8、JDK15(2020-09)
- RMI Actiation被标记为Deprecate,在JDK17中删除。
- RMI远程方法调用,在JDK1.2中引入,为分布式提供延迟加载方式,已被web服务器替代。
- JEP 339 Edwards-Curve Digital Signature Algorithm (EdDSA):实现了EdDSA椭圆曲线签名算法。
- JEP 384 Records (Second Preview):引入了Record类型,解决定义大量get/set方法的问题,可一定程度替代掉lomobok
- 移除Nashorn JavaScipt引擎
————————————————
9、JDK16(2021-03)
- 弹性Metaspace功能可将未使用的HotSpot虚拟机的Class Metadata(Metaspace)占用的内存更迅速的返回给操作系统,从而减少Metaspace的占用并简化Metaspace的代码以降低维护成本。
- 将JDK移植到Windows/AArch64平台。
- 提供用于打包独立的Java应用程序的jpackage工具。
————————————————
2.10 JDK17(2021-09, LTS)
主要:对前几个版本的整合和完善。Spring 6和SpringBoot3需要JDK17。
- JDK 内部的强封装,除了sun.misc.Unsafe等关键的内部 API 外,用户将不再可能通过单个命令行选项来 relax 对内部元素的强封装,这在 JDK 9 到 JDK 16 中是可行的。该计划的目标包括提高 JDK 的安全性和可维护性,并鼓励开发人员从内部元素迁移到标准 API。
- 删除远程方法调用 (RMI) 激活机制,同时保留 RMI 的其余部分。
- 删除实验性 AOT 和 JIT 编译器,它们几乎没有使用,但需要大量维护工作。该计划要求维护 Java 级别的 JVM 编译器接口,以便开发人员可以继续使用外部构建的编译器版本进行 JIT 编译。
- 将 JDK 移植到 MacOS/AArch64 以响应 Apple 将其 Macintosh 计算机从 x64 转换到 AArch64 的计划(Apple M1处理器)。针对 MacOS/AArch64 的更改有可能破坏现有的 Linux/AArch64、Windows/AArch64 和 MacOS/x64 port,但这种风险可通过预集成测试来降低。
- 弃用 Applet API 以进行删除。这个 API 本质上是无关紧要的,因为所有 Web 浏览器供应商要么已经取消了对 Java 浏览器插件的支持,要么已经宣布了这样做的计划。Applet API 之前在 2017 年 9 月的 Java 9 中已被弃用,但并未删除。Applet API彻底被删除,最早java就是靠applet开始火的。
- 弃用 Security Manager,准备在未来版本中移除。追溯到 Java 1.0,Security Manager 一直是保护客户端 Java 代码的主要手段,很少用于保护服务器端代码。该提案的一个目标是评估是否需要新的 API 或机制来解决使用 Security Manager 的特定狭窄用例,例如阻塞System::exit。计划要求弃用 Security Manager 以与旧 Applet API 一起删除,该 API 也计划在 JDK 17 中弃用。
————————————————
10、JDK18(2022-03)
- Javadoc中支持代码片段:从JDK18开始,可以使用@snippet来生成注释,且可以高亮某个代码片段
- 默认UTF-8字符编码
- 简单的Web服务器:JDK18中提供了一个新命令jwebserver, 运行这个命令可以启动一个简单的,最小化的静态web服务器,默认发布的是当前目录
- 使用方法句柄重新实现反射核心功能:JDK18改进了java.lang.reflect.Method, Constructor的实现逻辑,使得性能更佳。 不涉及到API的变动,只要升级到该版本,就能享受到更好的性能。
- 互联网地址解析 SPI:对于互联网地址解析 SPI,为主机地址和域名地址解析定义一个 SPI,以便 java.net.InetAddress 可以使用平台内置解析器以外的解析器。
————————————————
11、JDK19(2022-09)
405: Record记录模式(预览)
422: Linux/RISC-V 端口
424: 外部函数和内存 API(预览版)
425: 虚拟线程(预览)
426: Vector API(第四孵化器)
427: 开关的模式匹配(第三次预览)
428: 结构化并发(孵化器)
————————————————
12、JDK20(2023-03)
429:Scoped Values范围值(孵化器)
432:Record记录模式(第二次预览)
433:开关的模式匹配(第四次预览)
434:外部函数和内存 API(第二预览版)
436:虚拟线程(第二预览版)
437:结构化并发(第二个孵化器)
438:Vector API(第五孵化器)
————————————————
13、JDK21 (2023-09, LTS)
430: 字符串模板(预览)
431: 有序集合
439: 世代ZGC
440: 记录模式
441: 开关的模式匹配
442: 外部函数和内存 API(第三次预览版)
443: 未命名模式和变量(预览)
444: 虚拟线程
445: 未命名类和实例主要方法(预览)
446: 范围值(预览)
448: Vector API(第六个孵化器)
449: 弃用 Windows 32 位 x86 端口以进行删除
451: 准备禁止动态加载代理
452: 密钥封装机制API
453: 结构化并发(预览版)
————————————————
14、JDK22 (2024-03)
423: G1 的区域固定
447: super(…) 之前的语句(预览)
454: 外部函数和内存 API
456: 未命名变量和模式
457: 类文件 API(预览版)
458: 启动多文件源代码程序
459: 字符串模板(第二次预览)
460: Vector API(第七个孵化器)
461: 流收集器(预览)
462: 结构化并发(第二预览版)
463: 隐式声明的类和实例主要方法(第二预览版)
464: 范围值(第二次预览版)
————————————————
相关文献
1、Java中JDK8、JDK11、JDK17,该怎么选择?
Java中JDK8、JDK11、JDK17,该怎么选择?-腾讯云开发者社区-腾讯云
2、 JDK各版本文档以及迁移说明
Java Platform, Standard Edition Documentation - Releases
3、Oracle Java SE支持路线图|Oracle 中国
Oracle Java SE Support Roadmap | Oracle 中国
————————————————
原文链接:https://blog.csdn.net/qq_37191071/article/details/139808100