发布版本说明
根据发布计划,JDK 16这次发布的将是一个短期超版本。下一个长期支持版本(LTS版)将于今年9月发布(Java 17),LTS版将每三年发布一次,最后一个长期支持版本是9月18日发布的JDK 11。JDK 16是Java SE平台版本16的开源参考实现,由JCP的JSR 390(Java社区进程)指定。
00-1010主要分为OpenJDK版本和Oracle版本,下载地址如下:
OpenJDK版本:https://jdk.java.net/16/Oracle版本:https://www . Oracle.com/Java/technologies/javase-JDK 16-downloads . html以上版本如果用于个人学习,差别不大。但是,如果用于商业目的,则需要谨慎对待相关授权。Oracle JDK是根据二进制代码许可协议获得许可的,而OpenJDK是根据GPL v2许可获得许可的。
关于Java的更多基础知识,请参考《Java核心编程》这本书,书中有非常详细的描述。
安装包下载
JDK 16为用户提供了17项主要增强/更改,包括新的Java语言改进、工具和内存管理,以及一些孵化和预览功能。有了这些新特性,Java将进一步提高开发人员的工作效率。值得注意的变化是,经过一年的社区反馈和实际应用,JDK 14、模式匹配和记录中提供的预览功能终于在JDK 16落地。
此外,甲骨文还免费为Java SE订阅服务提供GraalVM企业版服务。GraalVM可以帮助提高应用程序性能并减少资源消耗,尤其是在微服务和云原生架构中。
00-1010这不是集合中的vector,而是一个新的初始迭代孵化器模块jdk .孵化器. Vector,用于表示运行时可靠编译到支持的CPU架构的最佳向量硬件指令的向量计算。
00-1010允许在JDK底部的C源代码中使用C 14的新语言功能,并提供了一个指南,说明哪些代码在HotSpot虚拟机代码中使用这些新功能。
00-1010将OpenJDK社区的源代码存储库从Mercurial迁移到Git。
00-1010托管GitHub上OpenJDK社区的Git存储库。
GitHub是世界上流行的托管Git代码的平台。在中国,托管代码推荐Gitee。
JDK 16 新特性说明
ZGC在JDK 11日首次被纳入,在JDK 15日正式转为阳性。这个版本是为了让ZGC支持并发栈处理,解决最后一个主要瓶颈,把ZGC的线程栈处理从安全点移到并发阶段。它还提供了一种机制,通过这种机制,其他HotSpot子系统可以延迟处理线程堆栈。
1. 338: Vector API (孵化)
Unix域套接字通道,它将Unix域套接字通道支持的所有功能添加到java.nio.channels包中的套接字通道和服务器套接字通道API中。U
NIX 域套接字主要用于同一主机上的进程间通信(IPC),大部分方面与 TCP/IP套接字类似,不同的是 UNIX 域套接字是通过文件系统路径名寻址,而不是通过 IP 地址和端口号。7. 386: Alpine Linux Port
在 x64 和 AArch64 平台体系结构上,将 JDK 移植到 Alpine Linux 以及使用 musl 作为其主要 C 语言库的其他 Linux 发行版中。
8. 387: Elastic Metaspace
弹性的元空间,可以帮助 HotSpot 虚拟机,将元空间中未使用的 class 元数据内存更及时地返回给操作系统,以减少元空间的内存占用空间。
另外,还简化了元空间的代码,以降低维护成本。
9. 388: Windows/AArch64 Port
将 JDK 移植到 Windows/ AArch64 平台系列。
10. 389: Foreign Linker API (孵化)
引入了一个新的 API,该 API 提供了对本地 native 代码的静态类型访问支持。
11. 390: Warnings for Value-Based Classes
基于值的类的警告,将基础类型包装类指定为基于值的类,废除其构造函数以进行删除,从而提示新的弃用警告。并且提供了在任何基于值的类的实例上不正常进行同步的警告。
12. 392: Packaging Tool
提供了 jpackage 打包工具,可用于打包独立的 Java 应用程序。
jpackage 打包工具是在 JDK 14 中首次作为孵化工具引入的新特性,到了 JDK 15 它仍然还在孵化中,现在它终于转正了。
13. 393: Foreign-Memory Access API (三次孵化)
该 API 允许 Java 应用程序安全有效地访问 Java 堆之外的外部内存。
这个最早在 JDK 14 中成为孵化特性,JDK 15/ JDK 16 中继续二、三次孵化并对其 API 有了一些更新,这个可以在 JDK 17 中好好期待一下转正。
14. 394: Pattern Matching for instanceof
模式匹配 for instanceof,相当于是增强的 instanceof,在 JDK 14 中首次成为预览特性,在 JDK 16 中正式转正。
模式匹配的到来将使得 instanceof 变得更简洁、更安全,为什么这么说,请看下面的示例。
Java 14 之前用法:
if (obj instanceof String) { String s = (String) obj; // 使用s }Java 14之后的用法:
if (obj instanceof String s) { // 使用s }15. 395: Records
简单来说,Records 就是一种新的语法糖,目的还是为了简化代码,在 JDK 14 中首次成为预览特性,在 JDK 16 中正式转正。
Records 可以在一定程度上避免低级冗余的代码,比如:constructors, getters, equals(), hashCode(), toString() 方法等,相当于 Lombok 的 @Data 注解,但又不能完全替代。
下面来看一个示例:
旧写法:
class Point { private final int x; private final int y; Point(int x, int y) { this.x = x; this.y = y; } int x() { return x; } int y() { return y; } public boolean equals(Object o) { if (!(o instanceof Point)) return false; Point other = (Point) o; return other.x == x && other.y = y; } public int hashCode() { return Objects.hash(x, y); } public String toString() { return String.format("Point[x=%d, y=%d]", x, y); } }新的Records写法:
record Point(int x, int y) { }16. 396: Strongly Encapsulate JDK Internals by Default
JDK 内部默认强封装,JDK 16 开始对 JDK 内部大部分元素默认进行强封装,sun.misc.Unsafe 之类的关键内部 API 除外,从而限制对它们的访问。
此外,用户仍然可以选择自 JDK 9 以来的默认的宽松的强封装,这样可以帮助用户毫不费力地升级到未来的 Java 版本。
17. 397: Sealed Classes (二次预览)
封闭类(二次预览),可以是封闭类和或者封闭接口,用来增强 Java 编程语言,防止其他类或接口扩展或实现它们。