牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上。
来看下 Oracle Java 支持路线图:
Oracle 继续保持版本半年一发的节奏。。。
试问:你还能追上 JDK 的发布速度吗??
可以看到,JDK 16 也不是一个长期支持的版本,只支持 6 个月到 2021 年 9 月,上一个长期支持版本还是 JDK 11,下一个长期支持版本是 JDK 17,还有半年也要发布了。
所以千万不要把 JDK 16(非长期支持版本)用于生产,大家了解一下就好。
ID | JEP | Feature |
---|---|---|
1 | 394 | Pattern Matching for instanceof |
2 | 395 | Records |
3 | 392 | Packaging Tool |
4 | 387 | Elastic Metaspace |
5 | 376 | ZGC: Concurrent Thread-Stack Processing |
6 | 380 | UNIX-Domain Socket Channels |
7 | 396 | Strongly Encapsulate JDK Internals by Default |
8 | 390 | Warnings for Value-Based Classes |
9 | 338 | Vector API (Incubator) |
10 | 389 | Foreign Linker API (Incubator) |
11 | 393 | Foreign-Memory Access API (Third Incubator) |
12 | 397 | Sealed Classes (Second Preview) |
13 | 347 | Enable C++14 Language Features (in the JDK source code) |
14 | 357 | Migrate from Mercurial to Git |
15 | 369 | Migrate to GitHub |
16 | 386 | Alpine Linux Port |
17 | 388 | Windows/Aarch64 Port |
JDK 16 这个版本提供了 17 个增强功能,包括全新的 Java 语言改进,工具和内存管理,以及还有一些孵化和预览特性,有了这些新功能,Java 会进一步提高开发人员的生产力。
值得关注的变化是,JDK 14 中提供的预览特性:模式匹配和记录(Records),经过一年的社区反馈和实际应用,终于在 JDK 16 中完成最终落地了。
另外,Oracle 还为 Java SE 订阅服务中免费提供 GraalVM 企业版服务,GraalVM 可以帮助提高应用程序的性能并减少资源消耗,尤其是在微服务和云原生架构中。
下面是 JDK 16 中的 17 个新特性详细介绍。
模式匹配 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 " 进行阅读。
简单来说,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 类的方式来看下它到底做了什么:
看完是不是有点 Lombok 的感觉?具体这里就不详细介绍了,栈长之前有写过一篇文章,点击这个链接进行阅读,或者关注公众号Java技术栈,回复 "java " 进行阅读。
提供了 jpackage 打包工具,可用于打包独立的 Java 应用程序。
jpackage 打包工具是在 JDK 14 中首次作为孵化工具引入的新特性,到了 JDK 15 它仍然还在孵化中,现在它终于转正了。
弹性的元空间,可以帮助 HotSpot 虚拟机,将元空间中未使用的 class 元数据内存更及时地返回给操作系统,以减少元空间的内存占用空间。
另外,还简化了元空间的代码,以降低维护成本。
ZGC 是一种较新的垃圾回收器,指在解决 HotSpot 虚拟机中的 GC 停顿及可伸缩问题。
ZGC 最早是在 JDK 11 中集成进来的,在 JDK 15 中正式转正。
这个版本则是为了让 ZGC 支持并发栈处理,解决了最后一个重大瓶颈,把 ZGC 中的线程栈处理从安全点移到了并发阶段。并且还提供了一种机制,使得其他 HotSpot 子系统可以通过该机制延迟处理线程栈。
UNIX 域套接字通道,为 java.nio.channels 包中的套接字通道和服务端套接字通道 APIs 增加 Unix 域套接字通道所有特性支持。
UNIX 域套接字主要用于同一主机上的进程间通信(IPC),大部分方面与 TCP/IP套接字类似,不同的是 UNIX 域套接字是通过文件系统路径名寻址,而不是通过 IP 地址和端口号。
JDK 内部默认强封装,JDK 16 开始对 JDK 内部大部分元素默认进行强封装,sun.misc.Unsafe 之类的关键内部 API 除外,从而限制对它们的访问。
此外,用户仍然可以选择自 JDK 9 以来的默认的宽松的强封装,这样可以帮助用户毫不费力地升级到未来的 Java 版本。
基于值的类的警告,将基础类型包装类指定为基于值的类,废除其构造函数以进行删除,从而提示新的弃用警告。并且提供了在任何基于值的类的实例上不正常进行同步的警告。
这个是对基本数据类型的包装类动刀了,只是提供警告,也不用太在意。
初步看,还以为是集合中的 Vector,原来不是!
Vector API 这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于表示在运行时可靠地编译到支持的 CPU 架构上的最佳矢量硬件指令的矢量计算。
很高端,搞不懂,后续有时间再研究。
引入了一个新的 API,该 API 提供了对本地 native 代码的静态类型访问支持。
外部内存访问 API(三次孵化中),引入了一个新的 API,可以帮助 Java 应用程序更安全、有效地访问 Java 堆之外的外部内存。
这个最早在 JDK 14 中成为孵化特性,JDK 15/ JDK 16 中继续二、三次孵化并对其 API 有了一些更新,这个可以在 JDK 17 中好好期待一下转正。
封闭类(二次预览),可以是封闭类和或者封闭接口,用来增强 Java 编程语言,防止其他类或接口扩展或实现它们。
来看下面这个示例:
public abstract sealed class Student
permits ZhangSan, LiSi, ZhaoLiu {
...
}
类 Student 被 sealed
修饰,说明它是一个封闭类,并且只允许指定的 3 个子类继承。
这个牛逼啊,有了这个特性,意味着以后不是你想继承就继承,想实现就实现了,你得经过允许才行,这个也可以在 JDK 17 中好好期待一下转正。
允许在 JDK 底层的 C ++ 源代码中使用 C ++ 14 的新语言特性,并且提供了在 HotSpot 虚拟机代码中,哪些代码使用了这些新特性的指南。
将 OpenJDK 社区的源代码存储库从 Mercurial(hg)迁移到 Git。
在 GitHub 上托管 OpenJDK 社区的 Git 存储库。
在 x64 和 AArch64 平台体系结构上,将 JDK 移植到 Alpine Linux 以及使用 musl 作为其主要 C 语言库的其他 Linux 发行版中。
将 JDK 移植到 Windows/ AArch64 平台系列。
现在的 JDK 真变成了“版本帝”,无力吐槽啊,版本发到了 16,大部分人却都还在用着 JDK 7/8,甚至 6。不过没关系,多了解一下,多掌握一点新东西,对你来说没有坏处。
虽然更新很快,但话又说回来,更是因为 Java 这种不断的更新、优化和创新,才使得 Java 保持着源源活力,Java 仍然是现在最成功、最主流的开发语言之一。
如果说 Java 第二,谁敢称第一呢?如果你说 PHP,那我 Respect!
最后,本文主要介绍了 JDK/Java 16 的 17 个新特性基本面,后面栈长有时间也会继续更新一些 JDK 新特性详细教程,关注公众号Java技术栈第一时间推送哦。如果你想看历史 Java 8+ 系列新特性教程,也可以在公众号菜单中进行阅读。
往期 Java 教程及示例源码:
https://github.com/javastacks/javastack
OracleJDK 16 发布地址:
https://www.oracle.com/java/technologies/javase/16-relnotes.html
OpenJDK 16 发布地址:
https://openjdk.java.net/projects/jdk/16/
Oracle JDK 16 下载地址:
https://www.oracle.com/java/technologies/javase-downloads.html
OpenJDK 16 下载地址:
https://jdk.java.net/16/
有兴趣的可以下载尝鲜了!!
本文原创,未经作者允许不可转载!
更多内容,欢迎关注作者微信公众号:Java技术栈
暂无评论
违反法律法规
侵犯个人权益
有害网站环境