Java版本的特性总结 8、9、10、11、12、13、14、15、16、17、18

Java8(2014.3)(LTS版本)

lambada表达式
函数式接口
方法引用
默认方法
Stream API 对元素流进行函数式操作
Optional 解决NullPointerException
Date Time API
重复注解 @Repeatable
Base64
使用元空间Metaspace代替持久代(PermGen space)

Java9(2017.9)

模块化
提供了List.of()、Set.of()、Map.of() 和 Map.ofEntries() 等工厂方法
接口支持私有方法
Optional 类改进
多版本兼容Jar包
JShell工具
try-with-resources的改进
Stream API的改进
设置G1为JVM默认垃圾收集器
支持http2.0和websocket的API

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

Java10(2018.3)

局部变量类型推断,(类似JS可以通过var来修饰局部变量,编译之后会推断出值的真实类型)
不可变集合的改进
并行全垃圾回收器 G1,来优化G1的延迟
线程本地握手,(允许在不执行全局VM安全点的情况下执行线程回调,可以停止单个线程,而不需要停止所有线程或不停止线程)
Optional新增orElseThrow()方法
类数据共享
Unicode 语言标签扩展
根证书

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

Java11(2018.9)(LTS版本)

增加一些符串处理方法
用于 Lambda 参数的局部变量语法
Http Client重写,支持HTTP/1.1和HTTP/2 ,也支持 websockets
可运行单一Java源码文件,如:java Test.java
ZGC:可伸缩低延迟垃圾收集器,(ZGC可以看做是G1之上更细粒度的内存管理策略。由于内存的不断分配回收会产生大量的内存碎片空间,因此需要整理策略防止内存空间碎片化,在整理期间需要将对于内存引用的线程逻辑暂停,这个过程被称为"Stop the world"。只有当整理完成后,线程逻辑才可以继续运行。(并行回收))
支持 TLS 1.3 协议
Flight Recorder(飞行记录器),基于OS、JVM和JDK的事件产生的数据收集框架
对Stream、Optional、集合API进行增强

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

Java12(2019.3)

Switch 表达式扩展,可以有返回值
新增NumberFormat对复杂数字的格式化
字符串支持transform、indent操作
新增方法Files.mismatch(Path, Path)
Teeing Collector
支持unicode 11
Shenandoah GC,新增的GC算法
G1收集器的优化,将GC的垃圾分为强制部分和可选部分,强制部分会被回收,可选部分可能不会被回收,提高GC的效率

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

Java13(2019.9)

Switch 表达式扩展(引入 yield 关键字);switch表达式增加yield关键字用于返回结果,作用类似于return,如果没有返回结果则使用break。
文本块升级 """;引入了文本块,可以使用"""三个双引号表示文本块,文本块内部就不需要使用换行的转义字符。
SocketAPI 重构;(Socket的底层实现优化,引入了NIO)
FileSystems.newFileSystem新方法
增强 ZGC 释放未使用内存;(ZGC优化,将标记长时间空闲的堆内存空间返还给操作系统,保证堆大小不会小于配置的最小堆内存大小,如果堆最大和最小内存大小设置一样,则不会释放内存还给操作系统。)

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

Java14(2020.3)

instanceof模式匹配,instanceof类型匹配语法简化,可以直接给对象赋值,如if(obj instanceof String str),如果obj是字符串类型则直接赋值给了str变量
引入Record类型,类似于Lombok 的@Data注解,可以向Lombok一样自动生成构造器、equals、getter等方法;
Switch 表达式-标准化
改进 NullPointerExceptions提示信息,打印具体哪个方法抛的空指针异常,避免同一行代码多个函数调用时无法判断具体是哪个函数抛异常的困扰,方便异常排查;
删除 CMS 垃圾回收器

Java15(2020.9)

EdDSA 数字签名算法
Sealed Classes(封闭类,预览),通过sealed关键字修饰抽象类限定只允许指定的子类才可以实现或继承抽象类,避免抽象类被滥用。
Hidden Classes(隐藏类)
移除 Nashorn JavaScript引擎
改进java.net.DatagramSocket 和 java.net.MulticastSocket底层实现

Java16(2021.3)

允许在 JDK C ++源代码中使用 C ++ 14功能
ZGC性能优化,去掉ZGC线程堆栈处理从安全点到并发阶段
增加 Unix 域套接字通道
弹性元空间能力
提供用于打包独立 Java 应用程序的 jpackage 工具

JDK16相当于是将JDK14、JDK15的一些特性进行了正式引入,如instanceof模式匹配(Pattern matching)、record的引入等最终到JDK16变成了final版本。

Java17(2021.9)(LTS版本)

Free Java License
JDK 17 将取代 JDK 11 成为下一个长期支持版本
Spring 6 和 Spring Boot 3需要JDK17
移除实验性的 AOT 和 JIT 编译器
恢复始终执行严格模式 (Always-Strict) 的浮点定义
正式引入密封类sealed class,限制抽象类的实现
统一日志异步刷新,先将日志写入缓存,然后再异步刷新

虽然JDK17也是一个LTS版本,但是并没有像JDK8和JDK11一样引入比较突出的特性,主要是对前几个版本的整合和完善。

Java18(2022.3)

将 UTF-8 指定为标准 Java API 的默认字符集
提供支持静态文件的最小 Web 服务器命令行工具jwebserver
定义了一个全新的 SPI(service-provider interface),用于主要名称和地址的解析
弃用 Finalization
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值