JDK 16 正式发布,一次性发布 17 个新特性…不服不行!

简介: JDK 16 正式发布牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上。来看下 Oracle Java 支持路线图:

JDK 16 正式发布

牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上。


来看下 Oracle Java 支持路线图:


image.png


Oracle 继续保持版本半年一发的节奏。。。


试问:你还能追上 JDK 的发布速度吗??


可以看到,JDK 16 也不是一个长期支持的版本,只支持 6 个月到 2021 年 9 月,上一个长期支持版本还是 JDK 11,下一个长期支持版本是 JDK 17,还有半年也要发布了。


所以千万不要把 JDK 16(非长期支持版本)用于生产,大家了解一下就好。


JDK 16 新特性一览

image.png

JDK 16 这个版本提供了 17 个增强功能,包括全新的 Java 语言改进,工具和内存管理,以及还有一些孵化和预览特性,有了这些新功能,Java 会进一步提高开发人员的生产力。


值得关注的变化是,JDK 14 中提供的预览特性:模式匹配和记录(*Records*),经过一年的社区反馈和实际应用,终于在 JDK 16 中完成最终落地了。


另外,Oracle 还为 Java SE 订阅服务中免费提供 GraalVM 企业版服务,GraalVM 可以帮助提高应用程序的性能并减少资源消耗,尤其是在微服务和云原生架构中。


JDK 16 新特性详细介绍

下面是 JDK 16 中的 17 个新特性详细介绍。


394:Pattern Matching for instanceof

模式匹配 for instanceof,相当于是增强的 instanceof,在 JDK 14 中首次成为预览特性,在 JDK 16 中正式转正。


模式匹配的到来将使得 instanceof 变得更简洁、更安全,为什么这么说,请看下面的示例。


正常的 instanceof 写法:

if (object instanceof Kid) {
  Kid kid = (Kid) object;
  // ...
} else if (object instanceof Kiddle) {
  Kid kid = (Kid) object;
  // ...
}

模式匹配的 instanceof 写法:

if (object instanceof Kid kid) {
  // ...
} else if (object instanceof Kiddle kiddle) {
  // ...
}

判断、赋值一步到位,是不是很牛逼?具体这里就不详细介绍了,栈长之前有写过一篇文章,点击这个链接进行阅读,或者关注公众号Java技术栈,回复 "java " 进行阅读。


395:Records

简单来说,Records 就是一种新的语法糖,目的还是为了简化代码,在 JDK 14 中首次成为预览特性,在 JDK 16 中正式转正。


Records 可以在一定程度上避免低级冗余的代码,比如:constructors, getters, equals(), hashCode(), toString() 方法等,相当于 Lombok 的 @Data 注解,但又不能完全替代。

下面来看一个示例:

public record Student(String name, int id, int age) {}

没错,一行搞定(public 都可以省略),就是这么简单粗暴!!!


我们再通过 IDEA 反编译 class 类的方式来看下它到底做了什么:


image.png


看完是不是有点 Lombok 的感觉?具体这里就不详细介绍了,栈长之前有写过一篇文章,点击这个链接进行阅读,或者关注公众号Java技术栈,回复 "java " 进行阅读。


392:Packaging Tool

提供了 jpackage 打包工具,可用于打包独立的 Java 应用程序。


jpackage 打包工具是在 JDK 14 中首次作为孵化工具引入的新特性,到了 JDK 15 它仍然还在孵化中,现在它终于转正了。


387:Elastic Metaspace

弹性的元空间,可以帮助 HotSpot 虚拟机,将元空间中未使用的 class 元数据内存更及时地返回给操作系统,以减少元空间的内存占用空间。


另外,还简化了元空间的代码,以降低维护成本。


376:ZGC: Concurrent Thread-Stack Processing

ZGC 是一种较新的垃圾回收器,指在解决 HotSpot 虚拟机中的 GC 停顿及可伸缩问题。


ZGC 最早是在 JDK 11 中集成进来的,在 JDK 15 中正式转正。


这个版本则是为了让 ZGC 支持并发栈处理,解决了最后一个重大瓶颈,把 ZGC 中的线程栈处理从安全点移到了并发阶段。并且还提供了一种机制,使得其他 HotSpot 子系统可以通过该机制延迟处理线程栈。


380:UNIX-Domain Socket Channels

UNIX 域套接字通道,为 java.nio.channels 包中的套接字通道和服务端套接字通道 APIs 增加 Unix 域套接字通道所有特性支持。


UNIX 域套接字主要用于同一主机上的进程间通信(IPC),大部分方面与 TCP/IP套接字类似,不同的是 UNIX 域套接字是通过文件系统路径名寻址,而不是通过 IP 地址和端口号。


396:Strongly Encapsulate JDK Internals by Default

JDK 内部默认强封装,JDK 16 开始对 JDK 内部大部分元素默认进行强封装,sun.misc.Unsafe 之类的关键内部 API 除外,从而限制对它们的访问。


此外,用户仍然可以选择自 JDK 9 以来的默认的宽松的强封装,这样可以帮助用户毫不费力地升级到未来的 Java 版本。


390:Warnings for Value-Based Classes

基于值的类的警告,将基础类型包装类指定为基于值的类,废除其构造函数以进行删除,从而提示新的弃用警告。并且提供了在任何基于值的类的实例上不正常进行同步的警告。


这个是对基本数据类型的包装类动刀了,只是提供警告,也不用太在意。


338:Vector API (Incubator)

初步看,还以为是集合中的 Vector,原来不是!


Vector API 这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于表示在运行时可靠地编译到支持的 CPU 架构上的最佳矢量硬件指令的矢量计算。


很高端,搞不懂,后续有时间再研究。


389:Foreign Linker API (Incubator)

引入了一个新的 API,该 API 提供了对本地 native 代码的静态类型访问支持。


393:Foreign-Memory Access API (Third Incubator)

外部内存访问 API(三次孵化中),引入了一个新的 API,可以帮助 Java 应用程序更安全、有效地访问 Java 堆之外的外部内存。


这个最早在 JDK 14 中成为孵化特性,JDK 15/ JDK 16 中继续二、三次孵化并对其 API 有了一些更新,这个可以在 JDK 17 中好好期待一下转正。


397:Sealed Classes (Second Preview)

封闭类(二次预览),可以是封闭类和或者封闭接口,用来增强 Java 编程语言,防止其他类或接口扩展或实现它们。


来看下面这个示例:

public abstract sealed class Student
    permits ZhangSan, LiSi, ZhaoLiu {
    ...
}

类 Student 被 sealed 修饰,说明它是一个封闭类,并且只允许指定的 3 个子类继承。


这个牛逼啊,有了这个特性,意味着以后不是你想继承就继承,想实现就实现了,你得经过允许才行,这个也可以在 JDK 17 中好好期待一下转正。


347:Enable C++14 Language Features (in the JDK source code)

允许在 JDK 底层的 C ++ 源代码中使用 C ++ 14 的新语言特性,并且提供了在 HotSpot 虚拟机代码中,哪些代码使用了这些新特性的指南。


357:Migrate from Mercurial to Git

将 OpenJDK 社区的源代码存储库从 Mercurial(hg)迁移到 Git。


369:Migrate to GitHub

在 GitHub 上托管 OpenJDK 社区的 Git 存储库。


386:Alpine Linux Port

在 x64 和 AArch64 平台体系结构上,将 JDK 移植到 Alpine Linux 以及使用 musl 作为其主要 C 语言库的其他 Linux 发行版中。


388:Windows/Aarch64 Port

将 JDK 移植到 Windows/ AArch64 平台系列。


总结

现在的 JDK 真变成了“版本帝”,无力吐槽啊,版本发到了 16,大部分人却都还在用着 JDK 7/8,甚至 6。不过没关系,多了解一下,多掌握一点新东西,对你来说没有坏处。


虽然更新很快,但话又说回来,更是因为 Java 这种不断的更新、优化和创新,才使得 Java 保持着源源活力,Java 仍然是现在最成功、最主流的开发语言之一。


如果说 Java 第二,谁敢称第一呢?如果你说 PHP,那我 Respect!


相关文章
|
2月前
|
安全 JavaScript 前端开发
JDK1.8的重要的新特性与功能
Java Development Kit (JDK) 1.8,也称为Java 8,是Java平台的一个重大更新,于2014年3月发布。它引入了多项新特性、新的API和性能提升
75 3
|
3月前
|
监控 安全 Java
探索Java的未来:JDK 18新特性全览
探索Java的未来:JDK 18新特性全览
80 0
|
3月前
|
缓存 安全 Java
JDK 14全景透视:每个Java开发者必知的新特性
JDK 14全景透视:每个Java开发者必知的新特性
55 0
|
3月前
|
JavaScript 前端开发 安全
Java新纪元:一探JDK 15的全新特性
Java新纪元:一探JDK 15的全新特性
46 0
|
3月前
|
JSON Java API
探秘JDK 13的黑科技:新特性一览
探秘JDK 13的黑科技:新特性一览
51 0
|
6天前
|
算法 Java 编译器
升级指南之JDK 11+ 新特性和AJDK
本文详细介绍了JDK个版本之间的特性、区别以及JDK版本更迭时优化了哪些地方,对JDK的版本选择给出了建议,以及升级教程。
|
13天前
|
存储 安全 Java
JDK22发布了!来看看有哪些新特性
以上是介绍 JDK22新特性的全部内容了,突然V哥想要感慨一下,技术之路,学无止境,选择 IT 技术,作个纯粹的人,享受研究技术的过程,这种带来的快感,也许只有真正热爱编程的人才能有体会。
|
2月前
|
编解码 Java API
集合在JDK9中的新特性
集合在JDK9中的新特性
|
2月前
|
Java
JDK8新特性--lambda表达式
面向对象思想强调:必须通过对象的形式来做事情
JDK8新特性--lambda表达式
|
2月前
|
SQL Java API
浅析jdk8所包含的主要特性
浅析jdk8所包含的主要特性