Java 新特性
2024-03-18 11:54:44 0 举报
AI智能生成
Java新特性包括模块化、lambda表达式、默认方法、新的日期和时间API等。
作者其他创作
大纲/内容
Java 8
Oracle 于 2014 发布了 Java8(jdk1.8),使用最多的 jdk 版本。
Interface 的方法可以用 default 或 static 修饰,为了解决接口的修改与现有的实现不兼容的问题。
functional interface 函数式接口,也称 SAM 接口,即 Single Abstract Method interfaces,有且只有一个抽象方法,但可以有多个非抽象方法的接口。<br>
Lambda 表达式,最重要新特性。
Stream,java.util.stream 包下,可以检索(Retrieve)和逻辑处理集合数据、包括筛选、排序、统计、计数等。
Optional,防止 NPE 问题。
Date-Time API,对java.util.Date强有力的补充,解决了 Date 类的大部分痛点。
《Java8 指南》中文翻译
Java 9
发布于 2017 年 9 月 21 日,最重要的改动是 Java 平台模块系统的引入。
JShell,是 Java 9 新增的一个实用工具。为 Java 提供了类似于 Python 的实时命令行交互工具。
模块系统,是Jigsaw Project的一部分,把模块化开发实践引入到了 Java 平台中,可以让我们的代码可重用性更好!
G1 成为默认垃圾回收器。
快速创建不可变集合,增加了List.of()、Set.of()、Map.of() 和 Map.ofEntries()等工厂方法来创建不可变集合。
String 存储结构优化,Java 8 及之前的版本,String 一直是用 char[] 存储。在 Java 9 之后,String 的实现改用 byte[] 数组存储字符串,节省了空间。
接口私有方法,接口的使用就更加灵活了,有点像是一个简化版的抽象类。
try-with-resources 增强,在 try-with-resources 语句中可以使用 effectively-final 变量。
Stream & Optional 增强
Stream 中增加了新的方法 ofNullable()、dropWhile()、takeWhile() 以及 iterate() 方法的重载方法。
Optional 类中新增了 ifPresentOrElse()、or() 和 stream() 等方法。
进程 API,增加了 java.lang.ProcessHandle 接口来实现对原生进程进行管理,尤其适合于管理长时间运行的进程。
响应式流 ( Reactive Streams )
变量句柄,是一个变量或一组变量的引用,包括静态域,非静态域,数组元素和堆外数据结构中的组成部分等。
平台日志 API 改进,Java 9 允许为 JDK 和应用配置同样的日志实现。
CompletableFuture类增强,新增了几个新的方法(completeAsync ,orTimeout 等)。
I/O 流的新特性,增加了新的方法来读取和复制 InputStream 中包含的数据。
改进应用的安全性能,Java 9 新增了 4 个 SHA- 3 哈希算法,SHA3-224、SHA3-256、SHA3-384 和 SHA3-512。
Java 10
发布于 2018 年 3 月 20 日,最知名的特性应该是 var 关键字(局部变量类型推断)的引入。
局部变量类型推断(var),var 并不会改变 Java 是一门静态类型语言的事实,编译器负责推断出类型。
垃圾回收器接口,通过引入一套纯净的垃圾收集器接口来将不同垃圾收集器的源代码分隔开。<br>
G1 并行 Full GC,为了最大限度地减少 Full GC 造成的应用停顿的影响。<br>
集合增强,List,Set,Map 提供了静态方法copyOf()返回入参集合的一个不可变拷贝。
Optional 增强,新增了orElseThrow()方法来在没有值时抛出指定的异常。
应用程序类数据共享(扩展 CDS 功能),允许应用类放置在共享存档中。
实验性的基于 Java 的 JIT 编译器、线程-局部管控、备用存储装置上的堆分配等
Java 11
于 2018 年 9 月 25 日正式发布,这是很重要的一个版本!这是据 Java 8 以后支持的首个长期版本,持续至 2026 年 9 月。
HTTP Client 标准化,Http Client 几乎被完全重写,并且现在完全支持异步非阻塞。
String 增强,增加了一系列的字符串处理方法。
Optional 增强,新增了isEmpty()方法来判断指定的 Optional 对象是否为空。
ZGC(可伸缩低延迟垃圾收集器),是一个可伸缩的、低延迟的垃圾收集器。处在实验阶段,只支持 Linux/x64 平台。
Lambda 参数的局部变量语法,允许开发者在 Lambda 表达式中使用 var 进行参数声明。
启动单文件源代码程序,允许使用 Java 解释器直接执行 Java 源代码。
新的垃圾回收器 Epsilon、低开销的 Heap Profiling、TLS1.3 协议、飞行记录器(Java Flight Recorder) 等。
Java 12
String 增强,增加了两个的字符串处理方法 indent() 和 transform() 。
Files 增强(文件比较),添加了方法( mismatch() )来比较两个文件。
数字格式化工具类,NumberFormat 新增了对复杂的数字进行格式化的支持。
Shenandoah GC,Redhat 主导开发的 Pauseless GC 实现,主要目标是 99.9% 的暂停小于 10ms,暂停与堆大小无关等。落地可能性大。
G1 收集器优化,默认的垃圾收集器 G1 带来了两项更新:可中止的混合收集集合 和 及时返回未使用的已分配内存。
增强 Switch,使用类似 lambda 语法条件匹配成功后的执行块,不需要多写 break 。<br>
instanceof 模式匹配,在判断是否属于具体的类型同时完成转换。
Java 13
增强 ZGC(释放未使用内存),将向操作系统返回被标识为长时间未使用的页面,这样它们将可以被其他进程重用。<br>
SocketAPI 重构,将 Socket API 的底层进行了重写,在 Java 13 中是默认使用新的 Socket 实现。
FileSystems,添加了以下三种新方法,以便更容易地使用将文件内容视为文件系统的文件系统提供程序。
动态 CDS 存档,允许在 Java 应用程序执行结束时动态进行类归档。
预览新特性<br>
文本块,支持两个 """ 符号中间的任何内容都会被解释为字符串的一部分,包括换行符。
增强 Switch(引入 yield 关键字到 Switch 中)
Java 14
空指针异常精准提示,通过 JVM 中添加参数,可以在空指针异常中获取更为详细的调用信息,更快的定位和解决问题。
转正
switch 的增强。
预览新特性<br>
record 关键字,record 关键字可以简化 数据类(一个 Java 类一旦实例化就不能再修改)的定义方式。
文本块,引入了两个新的转义字符。
instanceof 增强。
从 Java11 引入的 ZGC 作为继 G1 过后的下一代 GC 算法,从支持 Linux 平台到 Java14 开始支持 MacOS 和 Windows。
移除了 CMS(Concurrent Mark Sweep) 垃圾收集器(功成而退)。
新增了 jpackage 工具,标配将应用打成 jar 包外,还支持不同平台的特性包。
Java 15
CharSequence,接口添加了一个默认方法 isEmpty() 来判断字符序列为空。
TreeMap,新引入了5个方法。
EdDSA(数字签名算法),新加入了一个安全性和性能都更强的基于 Edwards-Curve Digital Signature Algorithm (EdDSA)实现的数字签名算法。
隐藏类(Hidden Classes),是为框架(frameworks)所设计的,隐藏类不能直接被其他类的字节码使用,只能在运行时生成类并通过反射间接使用它们。<br>
转正
ZGC,但默认的垃圾回收器依然是 G1。
文本块。
预览新特性<br>
密封类,可以对继承或者实现它们的类进行限制,这样这个类就只能被指定的类继承。
instanceof 模式匹配。
Nashorn JavaScript 引擎彻底移除、DatagramSocket API 重构、禁用和废弃偏向锁(Biased Locking)等。
Java 16
在 2021 年 3 月 16 日正式发布,非长期支持(LTS)版本。
启用 C++ 14 语言特性,允许在 JDK 的 C++ 源代码中使用 C++14 语言特性,并提供在 HotSpot 代码中可以使用哪些特性的具体指导。
ZGC 并发线程堆栈处理,消除 ZGC 垃圾收集器中最后一个延迟源可以极大地提高应用程序的性能和效率。<br>
弹性元空间,可将未使用的 HotSpot 类元数据(即元空间,metaspace)内存更快速地返回到操作系统,从而减少元空间的占用空间。
对基于值的类发出警告。
默认强封装 JDK 内部元素,默认强封装 JDK 的所有内部元素,但关键内部 API(例如 sun.misc.Unsafe)除外。
转正
打包工具。
instanceof 模式匹配。
记录类型。
孵化
向量 API(第一次孵化)。
外部内存访问 API(第三次孵化)。
外部链接器 API。
预览新特性
密封类
Unix-Domain 套接字通道、从 Mercurial 迁移到 Git、迁移到 GitHub、移植 Alpine Linux、Windows/AArch64 移植 等。
Java 17
在 2021 年 9 月 14 日正式发布,是一个长期支持(LTS)版本,到 2029 年 9 月份。Spring 6.x 和 Spring Boot 3.x 最低支持的就是 Java 17。
增强的伪随机数生成器,增加了新的接口类型和实现,使得开发者更容易在应用程序中互换使用各种 PRNG 算法。
弃用/删除
弃用 Applet API,用于编写在 Web 浏览器端运行的 Java 小程序。
删除 远程方法调用激活机制。
删除 实验性的 AOT 和 JIT 编译器。
弃用 安全管理器。
转正
密封类。
孵化
Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。
向量 API(第二次孵化)。
预览新特性
switch 的类型匹配,增加了类型匹配自动转换功能。
Java 18
在 2022 年 3 月 22 日正式发布,非长期支持版本。新特性少了很多。
默认字符集为 UTF-8,JDK 终于将 UTF-8 设置为默认字符集。
简易的 Web 服务器,可以使用 jwebserver 命令启动一个简易的静态 Web 服务器。
优化 Java API 文档中的代码片段,可以通过 @snippet 标签来引入代码段。
使用方法句柄重新实现反射核心,改进了 java.lang.reflect.Method、Constructor 的实现逻辑,使之性能更好,速度更快。
孵化
向量 API(第三次孵化)。
Foreign Function & Memory API(第二次孵化)。
互联网地址解析 SPI,定义了一个全新的 SPI(service-provider interface),用于主要名称和地址的解析。<br>
Java 19
于 2022 年 9 月 20 日正式发布,非长期支持版本,有比较重要的新特性。
孵化
向量 API(第四次孵化)。
结构化并发,一种多线程编程方法,目的是为了通过结构化并发 API 来简化多线程编程,并不是为了取代java.util.concurrent。
预览新特性
外部函数和内存 API,Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。
虚拟线程(Virtual Thread),是 JDK 而不是 OS 实现的轻量级线程(Lightweight Process,LWP)。<br>
Java 20
于 2023 年 3 月 21 日发布,非长期支持版本。
孵化
作用域值(Scoped Values),可以在线程内和线程间共享不可变的数据,优于线程局部变量,尤其是在使用大量虚拟线程时。
结构化并发(第二次孵化)。
向量 API(第五次孵化)。
预览新特性
记录模式(Record Patterns,第二次预览),可对 record 的值进行解构,也就是更方便地从记录类(Record Class)中提取数据。
switch 模式匹配(第四次预览)。
外部函数和内存 API(第二次预览),Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。
虚拟线程(第二次预览)。
Java 21
于 2023 年 9 月 19 日 发布,是一个长期支持(LTS)版本,这是一个非常重要的版本,里程碑式。
转正
记录模式。
switch 的模式匹配。
虚拟线程。
预览新特性
字符串模板(String Templates),提供了一种更简洁、更直观的方式来动态构建字符串。
外部函数和内存 API(第三次预览)。
未命名模式和变量(预览),可以使用下划线 _ 表示未命名的变量以及模式匹配时不使用的组件,旨在提高代码的可读性和可维护性。
未命名类和实例 main 方法 (预览),主要简化了 main 方法的的声明。
序列化集合,引入了一种新的集合类型:Sequenced Collections(序列化集合,也叫有序集合),这是一种具有确定出现顺序的集合。
分代 ZGC,对 ZGC 进行了功能扩展,增加了分代 GC 功能。不过,默认是关闭的,需要通过配置打开。
0 条评论
下一页
为你推荐
查看更多