JDK 8至JDK 21的主要新特性概览:
JDK 8
- Lambda表达式:引入了函数式编程的特性,使得代码更加简洁和灵活。
- Stream API:提供了一种新的抽象,可以让你以声明性方式处理集合数据。
- 新的日期和时间API:引入了
java.time
包,提供了一套全新的日期和时间处理类。 - 接口默认方法和静态方法:允许在接口中定义具有默认实现的方法和静态方法。
- Optional类:用于解决空指针异常的问题,可以包装一个可能为空的对象,并提供一系列的操作来处理该对象。
- CompletableFuture类:用于异步编程,可以简化异步编程的复杂性。
- 并行数组操作:通过
Arrays.parallelSort()
方法引入了并行数组排序。 - 重复注解支持:允许在同一个声明上多次使用相同的注解类型。
- Base64编码和解码:在
java.util
包中提供了对Base64编码和解码的支持。
JDK 9
- 平台模块系统(Jigsaw项目):引入了模块化,使得应用程序可以更加轻量级。
- 接口私有方法:允许在接口中创建私有方法。
- Try-With Resources:扩展了try-with-resources语句,支持自动资源管理。
- @SafeVarargs注释:用于防止在泛型代码中可能发生的不安全操作。
- 集合工厂方法:提供了新的集合工厂方法,简化集合的创建。
- JShell:引入了JShell,一个交互式命令行工具,用于探索Java编程语言。
- 流API改进:对流API进行了改进,增强了数据处理能力。
JDK 10
- 局部变量类型推断:通过
var
关键字实现局部变量类型推断。 - G1垃圾回收器优化:对G1垃圾回收器进行了优化,提高了性能和减少了停顿时间。
JDK 12
- Shenandoah垃圾收集器:引入了Shenandoah GC,一个低延迟的垃圾收集器。
- switch表达式:扩展了switch语句,允许它作为表达式使用。
JDK 13
- Dynamic CDS Archives:简化应用程序部署,提高启动速度,并优化内存占用。
- ZGC和Shenandoah的改进:这两个垃圾收集器都专注于减少GC停顿时间,提高了并发性和适应性。
JDK 14
- 文本块(Text Blocks):提高了Java程序中以非Java语言编写的代码的字符串的可读性。
- 外部内存访问API(Foreign-Memory Access API):允许Java程序安全、高效地访问Java堆之外的外部内存。
JDK 15
- 支持Unicode 13.0:升级了Unicode,支持Unicode 13.0。
- CharSequence新增isEmpty方法:给
CharSequence
新增了isEmpty
方法。 - TreeMap方法的Specialized Implementations:对
TreeMap
提供了putIfAbsent
,computeIfAbsent
,computeIfPresent
,compute
,merge
方法的overriding实现。
JDK 16
- 记录类(Record):引入了记录类,提供了一种新的数据载体,简化了数据类的创建。
- 模式匹配增强:在
switch
表达式中进一步增强了模式匹配,简化了代码并提高了可读性。
JDK 17
- 密封类和接口:提供了更好的封装性和安全性。
- 新的垃圾收集器:引入了ZGC和Shenandoah垃圾收集器,以提供低延迟的垃圾收集。
- 模式匹配:增强了
instanceof
的表达能力。
JDK 18
- 集合API增强:新增加或改进的方法,可能包括更方便的创建和操作集合的方式,以及更高效的集合算法。
- 输入/输出API改进:对文件I/O和网络I/O进行改进,例如提供更高效的数据读写方式,或是更强大的异步处理能力。
JDK 19
1. 平台模块系统(Jigsaw项目):这是Java平台模块系统的一个重要更新,旨在使应用程序更加轻量级,并将JDK本身划分为一组模块。
2. 接口私有方法:允许在接口中创建私有方法,这有助于在非抽象方法之间共享公共代码。
3. Try-With Resources:对try-with-resources语句进行了增强,允许使用final或等效于final的变量,而无需在try-with-resources语句中声明一个新变量。
4. @SafeVarargs注释:改进了对泛型代码中潜在不安全操作的警告。
5. 集合工厂方法:提供了新的集合工厂方法,简化了集合的创建。
6. Process API改进:对Process API进行了更新,提供了更好的进程管理能力。
7. 新版本字符串方案:引入了新的版本字符串方案,以支持模块化。
8. JShell:javashell(REPL):引入了JShell,一个交互式命令行工具,用于探索Java编程语言。
9. 流API改进:对流API进行了改进,增强了数据处理能力。
10. 针对Microsoft Windows及更多应用程序的安装程序增强功能:提升了安装程序的用户体验和功能性。
11. Compact Strings:通过JEP 254引入了Compact Strings,优化了字符串存储,减少了内存占用。
12. Make G1 the Default Garbage Collector:通过JEP 248将G1垃圾收集器设置为默认垃圾收集器,以提高性能。
13. Platform Logging API and Service:通过JEP 264引入了平台日志API和服务,提供了一个统一的日志接口。
14. Reserved Stack Areas for Critical Sections:通过JEP 270引入了为关键部分保留的栈区域,优化了性能。
15. Indify String Concatenation:通过JEP 280引入了标识字符串连接,优化了字符串拼接的性能。
16. Spin-Wait Hints:通过JEP 285引入了旋转等待提示,提供了一种机制,通过标准化的方法向底层处理器传达线程处于自旋等待状态。
JDK 20
- Scoped Values(作用域值):允许在大型程序中的组件之间安全有效地共享数据,而无需求助于方法参数。
- 记录模式(Record Patterns):对record的值进行解构,也就是更方便地从记录类中提取数据。
- switch模式匹配:增强了switch语句的模式匹配能力。
- 外部函数和内存API:允许Java程序安全、高效地访问Java堆之外的外部内存。
- 虚拟线程:提供了一种新的轻量级线程实现,可以显著提高并发程序的性能和可伸缩性。
- 结构化并发:提供了一种新的方式来管理并发任务,使得并发编程更加安全和易于管理。
- 向量API:提供了一种新的API,用于在支持的CPU架构上进行向量计算。
JDK 21
- 字符串模板(String Templates):提供了一种更简洁、更直观的方式来动态构建字符串。
- 序列化集合(Sequenced Collections):提供了一种新的集合类型,支持元素的有序序列化。
- 分代ZGC(Generational ZGC):对ZGC垃圾收集器进行了优化,提高了性能。
- 记录模式(Record Patterns):进一步增强了记录模式,使得从记录类中提取数据更加方便。
- switch的模式匹配(Pattern Matching for switch):增强了switch语句的模式匹配能力。
- 外部函数和内存API(Foreign Function & Memory API):允许Java程序安全、高效地访问Java堆之外的外部内存。
- 虚拟线程(Virtual Threads):提供了一种新的轻量级线程实现,可以显著提高并发程序的性能和可伸缩性。