热门排行
简介
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(JDK) 16 for Windows :点击下载
本次为大家提供的是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创新上获得动手经验。