
JDK/Java16即将GA。JDK/Java16总共包含17个JEP,涉及到新语言特点、改进JVM、新工具和库、对未来功能的验证、孵化和预览阶段的功能以及提高生产效率这几大方面。JDK/Java16的亮点包括孵化阶段的VectorAPI、密封类和插口、将JDK移植到Windows/AArch64平台、启用C++14语言特点,以及将ZGC线程堆栈处理从安全点联通到并发阶段等。最新的Java开发工具包(JDK)最终完成了instanceof(JEP394)和Records(JEP395)的模式匹配,这是Java14中首次预览的语言提高功能。据悉,开发人员可以使用新的PackagingTool(JEP392)进行自我包装。包含Java的应用程序,并探求三种孵化功能,即VectorAPI(JEP338),ForeignLinkerAPI(JEP389)和Foreign-MemoryAccessAPI(JEP389),以及一种预览功能,SealedClasss(JEP397)。欢迎须要此款工具的同学前来下载使用。
本次为你们提供的是JavaSEDevelopmentKit16.0版本的下载地址,按照发布规划,JDK/Java16属于短期维护版本,仅有6个月的技术支持。下一个版本——计划9月发布的JDK/Java17(21.9LTS)才是常年支持版本。
基本介绍
JDK16是JavaSE平台版本16的开源参考实现,由Java社区流程中的JSR390指定。
JDK16于2021年3月16日即将上市。Oracle提供了GPL下可用于生产的二补码文件。其他供应商的二补码文件也将很快发布。
该版本的功能和时间表是通过JEP流程(由JEP2.0议案修订)提出并跟踪的。该发行版是使用JDK发行流程(JEP3)制做的。
特点
338:VectorAPI(Incubator)
347:EnableC++14LanguageFeatures
357:MigratefromMercurialtoGit
369:MigratetoGitHub
376:ZGC:ConcurrentThread-StackProcessing
380:Unix-DomainSocketChannels
386:AlpineLinuxPort
387:ElasticMetaspace
388:Windows/AArch64Port
389:ForeignLinkerAPI(Incubator)
390:WarningsforValue-BasedClasses
392:PackagingTool
393:Foreign-MemoryAccessAPI(ThirdIncubator)

394:PatternMatchingforinstanceof
395:Records
396:StronglyEncapsulateJDKInternalsbyDefault
397:SealedClasses(SecondPreview)
功能特点
VectorAPI(Incubator)
处于孵化阶段的VectorAPI,其中JDK将配备一个孵化器模块jdk.incubator.vector,用于抒发可在支持的CPU构架上编译为最佳矢量硬件指令的矢量估算,以实现优于等效标量估算的性能。
EnableC++14LanguageFeatures
启用C++14语言特点,支持在JDKC++源代码中使用C++14语言特点。
MigratefromMercurialtoGit
OpenJDK源代码库从Mercurial迁移到Git。
MigratetoGitHub
OpenJDK源代码库迁移到GitHub,此变化是基于OpenJDK源代码库从Mercurial迁移到Git。
ZGC:ConcurrentThread-StackProcessing
将ZGC线程堆栈处理从安全点联通到并发阶段。此计划的目标包括从ZGC安全点中删掉线程堆栈处理。
Unix-DomainSocketChannels
为java.nio.channels包中的socketchannel和server-socketchannelAPI添加Unix-domain(AF_UNIX)支持。
AlpineLinuxPort
针对x64以及AArch64构架,将JDK移植到AlpineLinux以及其他使用musl作为主要C语言库的Linux发行版上。
ElasticMetaspace
弹性元空间(ElasticMetaspace)能力,它可以将未使用的HotSpotVM类元数据(元空间)显存更迅速地返回给操作系统,因而减少元空间的占用空间并简化元空间代码,以及减少维护成本。

Windows/AArch64Port
将JDK移植到Windows/AArch64平台。
ForeignLinkerAPI(Incubator)
处于孵化阶段的ForeignLinkerAPI(外部链接器API),该API用于对本地代码进行静态类型访问。
WarningsforValue-BasedClasses
对基于值的类(Value-BasedClasses)进行警告。在Java平台中对于任何基于值的类实例进行同步的错误尝试,会给以警告。
PackagingTool
提供用于打包独立Java应用程序的jpackage工具。
Foreign-MemoryAccessAPI(ThirdIncubator)
处于孵化器第三阶段的Foreign-MemoryAccessAPI,该API容许Java应用程序安全有效地访问Java堆之外的外部显存。
PatternMatchingforinstanceof
为instanceof操作符提供模式匹配。模式匹配使程序中的通用逻辑(即从对象中有条件地提取组件)得以更简练、更安全地抒发。
Records
Records提供了一种紧凑的句型来申明类,以帮助开发者写出更简约的代码,这种类是浅层不可变数据(shallowlyimmutabledata)的透明拥有者。该特点主要用在特定领域的类linux 下载工具,这种类主要用于保存数据linux设置默认网关,不提供领域行为。
StronglyEncapsulateJDKInternalsbyDefault
不仅sun.misc.Unsafe等关键的内部API外,默认对JDK内部进行强封装,用户也可以选择自JDK9以来默认的修身强封装。
SealedClasses(SecondPreview)
Sealedclass&interface(密封类和插口)可以限制什么类和插口可以承继或实现它们。
时间表
2020/12/10Rampdown第一阶段(来自主线的货叉)
2021/01/14加速第二阶段
2021/02/04初始版本候选
2021/02/18最终版本候选
2021/03/16全面上市
更新内容

Java™SE开发工具包16.0.2(JDK16.0.2)
2021年7月20日
此更新版本的完整版本字符串是16.0.2+7(其中“+”表示“构建”)。版本号为16.0.2。
IANATZ数据2021a
JDK16.0.2包含IANA时区数据2021a。
有关更多信息,请参阅JRE软件中的时区数据版本。
安全基线
JDK16.0.2发布时JavaRuntimeEnvironment(JRE)的安全基线如下表所示:
JRE家族版本JRE安全基线(完整版本字符串)
1616.0.2+7
1111.0.12+8
88u301-b09
77u311-b07
使JDK保持最新
Oracle建议使用每位重要补丁更新(CPU)更新JDK。为了确定某个版本是否是最新版本,可以使用“安全基准”页面来确定每位版本系列的最新版本。
包含安全漏洞修补的重要补丁更新提早一年在重要补丁更新、安全警报和公告中公布。不建议在计划于2021年10月19日进行的下一次关键补丁更新以后使用此JDK(版本16.0.2)。
删掉的功能和选项
安全库/java.security
删掉了Telia公司的SoneraClass2CA证书
以下根证书已从cacerts信任库中删掉:
+Telia公司
+soneraclass2ca
DN:CN=SoneraClass2CA,O=Sonera,C=FI
见JDK-8225081
其他注意事项
安装/安装
更新了JDKRPM提供的功能列表
以下功能已从OracleJDK/OracleJRERPM提供的列表中删掉:xml-commons-api、jaxp_parser_impl和java-fonts。列表的清理解决了与模块化rpm的现有和潜在冲突。
还有其他RPM提供这种功能,因而应当不会对依赖于它们的软件包形成影响。在此修改之前,包管理器可以使用其他RPM来满足OracleJDK/OracleJRERPM提供的依赖关系。
JDK-8263575(非公开)
Bug修补
此版本还包含针对Oracle重要补丁更新中描述的安全漏洞的修补程序。有关此版本中包含的错误修补的更完整列表,请参阅JDK16.0.2错误修补页面。
16.0.1
语言提高功能首次在JDK14中引入,在JDK16中完成
JEP394:instanceof的模式匹配–通过为instanceof运算符进行模式匹配来提高Java编程语言。
JEP395:记录–通过记录提高Java编程语言,记录是充当不变数据透明载体的类。记录可以被视为名义元组。
提升开发人员生产力的新工具
JEP392:打包工具–提供jpackage工具,用于打包自包含的Java应用程序。
改进的显存管理以提升性能
JEP387:弹性元空间–更快地将未使用的HotSpot类元数据(即,元空间)显存返回给操作系统,减少元空间的占用空间,并简化元空间代码linux jre16下载,以减少维护成本。
JEP376:ZGC:并行线程堆栈处理–将ZGC线程堆栈处理从安全点移至并发阶段。这项工作清除了容许并发堆栈处理的最后一个显着困局。
改进的网路以提升开发人员的生产力和灵活性

JEP380:UNIX域套接字通道–将对主要UNIX平台和Windows通用的UNIX域套接字的所有功能的支持添加到java.nio.channels包中的套接字通道和服务器套接字通道API。UNIX域套接字用于同一主机上的进程间通讯(IPC)。它们在大多数方面与TCP/IP套接字类似,不同之处在于它们是通过文件系统路径名而不是Internet合同(IP)地址和端标语来轮询的。
解决未来不兼容的代码
JEP396:默认情况下强烈封装JDK内部–在JDK9中,我们强烈封装了新的内部API元素,因而限制了对它们的访问。并且,作为迁移的辅助手段linux jre16下载,JDK9故意选择在运行时不强烈封装JDK8中存在的软件包的内容。JDK16默认情况下封装了JDK的大多数内部元素(关键内部API除外),因而强化了此约束。诸如sun.misc.Unsafe。最终用户依然可以选择自JDK9以来默认使用的修身的强封装。这将鼓励开发人员从使用内部元素迁移到使用标准API,便于她们和她们的用户都可以毫不费劲地升级到将来的Java版本。
JEP390:基于值的类的警告–将原始包装器类指定为基于值的类,并弃用其构造函数以进行删掉,进而提示新的弃用警告。提供有关在Java平台中不正确尝试在任何基于值的类的实例上进行同步的警告。
孵化和预览功能
JEP338:矢量API(孵化器)–提供孵化器模块jdk.incubator.vector的初始迭代,以抒发可在运行时可靠地编译为支持的CPU构架上的最佳矢量硬件指令的矢量估算。
JEP389:外部链接程序API(孵化器)–引入了API,该API提供了对本地代码的静态类型的纯Java访问。
JEP393:外部储存器访问API(第三孵化器)–引入了API,以容许Java程序安全有效地访问Java堆之外的外部储存器。
JEP397:密封类(第二预览)–通过密封类和插口提高了Java编程语言。密封的类和插口限制可以扩充或实现它们的其他类或插口。
OpenJDK贡献者的改进
JEP347:启用C++14语言功能(在JDK源代码中)–允许在JDKC++源代码中使用C++14语言功能,并提供有关在HotSpot代码中可以使用什么功能的特定手册。
JEP357:从Mercurial迁移到Git–将OpenJDK社区的源代码储存库从Mercurial(hg)迁移到Git。
JEP369:迁移到GitHub–在GitHub上托管OpenJDK社区的Git储存库。
新端口在更多平台上提供对Java的支持
JEP386:AlpineLinux端口–在x64和AArch64体系结构上,将JDK移植到AlpineLinux以及使用musl作为其主要C库的其他Linux发行版。
JEP388:Windows/Aarch64端口–将JDK移植到Windows/AArch64。
不断使Java显得更好
基于不断的创新,Java一直是最成功的开发平台之一,可以满足现代应用程序开发人员不断发展的需求。为了使OracleJavaSE订阅对顾客更具价值,Oracle添加了GraalVMEnterprise作为应享权力。GraalVM可以帮助提升应用程序的性能并降低资源消耗,尤其是在微服务和云原生构架中。通过借助OracleJavaSE订阅来管理Java资产的组织除了受惠于Oracle的最新增强功能和对Java专家的直接访问,并且与其他方式相比可节约大量成本。
“没有每隔三到四年就对Java的新事物形成兴趣,这些节奏使我成为饱含激情的开发人员,老师和培训师,这很活跃,”巴黎索邦学院东部的JoséPaumard助理院长和伦敦Java用户联合组织者说。Group。“我急切希望使用Records来增强数据处理代码的性能和可读性,而且还能将其用作预览功能以后,如今可以在此最新版本中使用它。”
开发人员可以了解有关Java16的更多信息,并在3月23日,25日和30日的OracleDeveloperLive:Java创新上获得动手经验。
