JDK/Java 16 正式 GA。JDK/Java 16 总共包含 17 个 JEP,涉及到新语言特性、改进 JVM、新工具和库、对未来功能的验证、孵化和预览阶段的功能以及提升生产效率这几大方面。JDK/Java 16 的亮点包括孵化阶段的 Vector API、密封类和接口、将 JDK 移植到 Windows / AArch64平台、启用 C++14 语言特性,以及将 ZGC 线程堆栈处理从安全点移动到并发阶段等。最新的Java开发工具包(JDK)最终完成了instanceof(JEP 394)和Records(JEP 395)的模式匹配,这是Java 14中首次预览的语言增强功能。此外,开发人员可以使用新的Packaging Tool(JEP 392)进行自我包装。包含Java的应用程序,并探索三种孵化功能,即Vector API(JEP 338),Foreign Linker API(JEP 389)和Foreign-Memory Access API(JEP 389),以及一种预览功能,Sealed Classs( JEP 397)。 欢迎需要此款工具的朋友前来下载使用。

本次为大家提供的是Java SE Development Kit 16.0版本的下载地址,根据发布规划,JDK/Java 16 属于短期维护版本,仅有 6 个月的技术支持。下一个版本——计划9月发布的 JDK/Java 17 (21.9 LTS) 才是长期支持版本。

基本介绍

JDK 16是Java SE平台版本16的开源参考实现,由Java社区流程中的JSR 390指定。

JDK 16于2021年3月16日正式上市。Oracle提供了GPL下可用于生产的二进制文件。其他供应商的二进制文件也将很快发布。

该版本的功能和时间表是通过JEP流程(由JEP 2.0提案修订)提出并跟踪的。该发行版是使用JDK发行流程(JEP 3)制作的。

特征

338: Vector API (Incubator)

347: Enable C++14 Language Features

357: Migrate from Mercurial to Git

369: Migrate to GitHub

376: ZGC: Concurrent Thread-Stack Processing

380: Unix-Domain Socket Channels

386: Alpine Linux Port

387: Elastic Metaspace

388: Windows/AArch64 Port

389: Foreign Linker API (Incubator)

390: Warnings for Value-Based Classes

392: Packaging Tool

393: Foreign-Memory Access API (Third Incubator)

394: Pattern Matching for instanceof

395: Records

396: Strongly Encapsulate JDK Internals by Default

397: Sealed Classes (Second Preview)

功能特性

Vector API (Incubator)

处于孵化阶段的 Vector API,其中 JDK 将配备一个孵化器模块jdk.incubator.vector,用于表达可在支持的 CPU 架构上编译为最佳矢量硬件指令的矢量计算,以实现优于等效标量计算的性能。

Enable C++14 Language Features

启用 C++14 语言特性,支持在 JDK C++ 源代码中使用 C++14 语言特性。

Migrate from Mercurial to Git

OpenJDK 源代码库从 Mercurial 迁移到 Git。

Migrate to GitHub

OpenJDK 源代码库迁移到 GitHub,此变化是基于 OpenJDK 源代码库从 Mercurial 迁移到 Git。

ZGC: Concurrent Thread-Stack Processing

将 ZGC 线程堆栈处理从安全点移动到并发阶段。此计划的目标包括从 ZGC 安全点中删除线程堆栈处理。

Unix-Domain Socket Channels

为java.nio.channels包中的 socket channel 和 server-socket channel API 添加 Unix-domain (AF_UNIX) 支持。

Alpine Linux Port

针对 x64 以及 AArch64 架构,将 JDK 移植到 Alpine Linux 以及其他使用 musl 作为主要 C 语言库的 Linux 发行版上。

Elastic Metaspace

弹性元空间 (Elastic Metaspace) 能力,它可以将未使用的 HotSpot VM 类元数据(元空间)内存更迅速地返回给操作系统,从而减少元空间的占用空间并简化元空间代码,以及降低维护成本。

Windows/AArch64 Port

将 JDK 移植到 Windows/AArch64 平台。

Foreign Linker API (Incubator)

处于孵化阶段的 Foreign Linker API(外部链接器 API),该 API 用于对本地代码进行静态类型访问。

Warnings for Value-Based Classes

对基于值的类 (Value-Based Classes) 进行警告。在 Java 平台中对于任何基于值的类实例进行同步的错误尝试,会予以警告。

Packaging Tool

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

Foreign-Memory Access API (Third Incubator)

处于孵化器第三阶段的 Foreign-Memory Access API,该 API 允许 Java 应用程序安全有效地访问 Java 堆之外的外部内存。

Pattern Matching for instanceof

为 instanceof 操作符提供模式匹配。模式匹配使程序中的通用逻辑(即从对象中有条件地提取组件)得以更简洁、更安全地表达。

Records

Records 提供了一种紧凑的语法来声明类,以帮助开发者写出更简洁的代码,这些类是浅层不可变数据(shallowly immutable data)的透明拥有者。该特性主要用在特定领域的类,这些类主要用于保存数据,不提供领域行为。

Strongly Encapsulate JDK Internals by Default

除了sun.misc.Unsafe等关键的内部 API 外,默认对 JDK 内部进行强封装,用户也可以选择自 JDK 9 以来默认的宽松强封装。

Sealed Classes (Second Preview)

Sealed class & interface(密封类和接口)可以限制哪些类和接口可以继承或实现它们。

时间表

2020/12/10 Rampdown第一阶段(来自主线的货叉)

2021/01/14加速第二阶段

2021/02/04初始版本候选

2021/02/18最终版本候选

2021/03/16全面上市

更新内容

Java™ SE 开发工具包 16.0.2 (JDK 16.0.2)
2021 年 7 月 20 日

此更新版本的完整版本字符串是 16.0.2+7(其中“+”表示“构建”)。版本号为 16.0.2。

IANA TZ 数据 2021a
JDK 16.0.2 包含 IANA 时区数据 2021a。

有关更多信息,请参阅 JRE 软件中的时区数据版本。

安全基线
JDK 16.0.2 发布时 Java Runtime Environment (JRE) 的安全基线如下表所示:

JRE 家族版本 JRE 安全基线(完整版本字符串)
16 16.0.2+7
11 11.0.12+8
8 8u301-b09
7 7u311-b07
使 JDK 保持最新
Oracle 建议使用每个重要补丁更新 (CPU) 更新 JDK。为了确定某个版本是否是最新版本,可以使用“安全基准”页面来确定每个版本系列的最新版本。

包含安全漏洞修复的重要补丁更新提前一年在重要补丁更新、安全警报和公告中公布。不建议在计划于 2021 年 10 月 19 日进行的下一次关键补丁更新之后使用此 JDK(版本 16.0.2)。

删除的功能和选项
安全库/java.security
➜ 删除了 Telia 公司的 Sonera Class2 CA 证书
以下根证书已从 cacerts 信任库中删除:

+ Telia 公司
+ soneraclass2ca
DN:CN=Sonera Class2 CA,O=Sonera,C=FI
见JDK-8225081
其他注意事项
安装/安装
➜ 更新了 JDK RPM 提供的功能列表
以下功能已从 OracleJDK/OracleJRE RPM 提供的列表中删除:xml-commons-api、jaxp_parser_impl 和 java-fonts。列表的清理解决了与模块化 rpm 的现有和潜在冲突。

还有其他 RPM 提供这些功能,因此应该不会对依赖于它们的软件包产生影响。在此更改之前,包管理器可以使用其他 RPM 来满足 OracleJDK/OracleJRE RPM 提供的依赖关系。

JDK-8263575(非公开)
Bug修复
此版本还包含针对 Oracle 重要补丁更新中描述的安全漏洞的修复程序。有关此版本中包含的错误修复的更完整列表,请参阅 JDK 16.0.2 错误修复页面。

16.0.1

语言增强功能首次在JDK 14中引入,在JDK 16中完成

JEP 394:instanceof的模式匹配–通过为instanceof运算符进行模式匹配来增强Java编程语言。

JEP 395:记录–通过记录增强Java编程语言,记录是充当不变数据透明载体的类。记录可以被视为名义元组。

提高开发人员生产力的新工具

JEP 392:打包工具–提供jpackage工具,用于打包自包含的Java应用程序。

改进的内存管理以提高性能

JEP 387:弹性元空间–更快地将未使用的HotSpot类元数据(即,元空间)内存返回给操作系统,减少元空间的占用空间,并简化元空间代码,以降低维护成本。

JEP 376:ZGC:并行线程堆栈处理–将ZGC线程堆栈处理从安全点移至并发阶段。这项工作消除了允许并发堆栈处理的最后一个显着瓶颈。

改进的网络以提高开发人员的生产力和灵活性

JEP 380:UNIX域套接字通道–将对主要UNIX平台和Windows通用的UNIX域套接字的所有功能的支持添加到java.nio.channels包中的套接字通道和服务器套接字通道API。UNIX域套接字用于同一主机上的进程间通信(IPC)。它们在大多数方面与TCP / IP套接字类似,不同之处在于它们是通过文件系统路径名而不是Internet协议(IP)地址和端口号来寻址的。

解决未来不兼容的代码

JEP 396:默认情况下强烈封装JDK内部–在JDK 9中,我们强烈封装了新的内部API元素,从而限制了对它们的访问。但是,作为迁移的辅助手段,JDK 9故意选择在运行时不强烈封装JDK 8中存在的软件包的内容。JDK16默认情况下封装了JDK的大多数内部元素(关键内部API除外),从而加强了此约束。例如sun.misc.Unsafe。最终用户仍然可以选择自JDK 9以来默认使用的宽松的强封装。这将鼓励开发人员从使用内部元素迁移到使用标准API,以便他们和他们的用户都可以毫不费力地升级到将来的Java版本。

JEP 390:基于值的类的警告–将原始包装器类指定为基于值的类,并弃用其构造函数以进行删除,从而提示新的弃用警告。提供有关在Java平台中不正确尝试在任何基于值的类的实例上进行同步的警告。

孵化和预览功能

JEP 338:矢量API(孵化器) –提供孵化器模块jdk.incubator.vector的初始迭代,以表达可在运行时可靠地编译为支持的CPU架构上的最佳矢量硬件指令的矢量计算。

JEP 389:外部链接程序API(孵化器) –引入了API,该API提供了对本地代码的静态类型的纯Java访问。

JEP 393:外部存储器访问API(第三孵化器) –引入了API,以允许Java程序安全有效地访问Java堆之外的外部存储器。

JEP 397:密封类(第二预览) –通过密封类和接口增强了Java编程语言。密封的类和接口限制可以扩展或实现它们的其他类或接口。

OpenJDK贡献者的改进

JEP 347:启用C ++ 14语言功能(在JDK源代码中) –允许在JDK C ++源代码中使用C ++ 14语言功能,并提供有关在HotSpot代码中可以使用哪些功能的特定指南。

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

JEP 369:迁移到GitHub –在GitHub上托管OpenJDK社区的Git存储库。

新端口在更多平台上提供对Java的支持

JEP 386:Alpine Linux端口–在x64和AArch64体系结构上,将JDK移植到Alpine Linux以及使用musl作为其主要C库的其他Linux发行版。

JEP 388:Windows / Aarch64端口–将JDK移植到Windows / AArch64。

不断使Java变得更好

基于不断的创新,Java仍然是最成功的开发平台之一,可以满足现代应用程序开发人员不断发展的需求。为了使Oracle Java SE订阅对客户更具价值,Oracle添加了GraalVM Enterprise作为应享权利。GraalVM可以帮助提高应用程序的性能并减少资源消耗,尤其是在微服务和云原生架构中。通过利用Oracle Java SE订阅来管理Java资产的组织不仅受益于Oracle的最新增强功能和对Java专家的直接访问,而且与其他方法相比可节省大量成本。

“没有每隔三到四年就对Java的新事物产生兴趣,这种节奏使我成为充满激情的开发人员,老师和培训师,这很活跃,”巴黎索邦大学北部的JoséPaumard助理教授和巴黎Java用户联合组织者说。 Group。“我迫切希望使用Records来提高数据处理代码的性能和可读性,并且能够将其用作预览功能之后,现在可以在此最新版本中使用它。”

开发人员可以了解有关Java 16的更多信息,并在3月23日,25日和30日的Oracle Developer Live:Java创新上获得动手经验。

下载地址

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。