jdk16是由甲骨文公司宣布推出的Java语言的软件开发工具包,Java仍然是有史以来最成功的开发平台之一,它基于不断创新以满足现代应用程序开发人员不断变化的需求,而在此工具包中它包含了该平台的17项新增强功能,能将进一步提高开发人员的生产力。该开发工具包 (JDK) 最终确定了 instanceof (JEP 394) 和Records (JEP 395) 的模式匹配,这是以前在 Java 14 中首次预览的语言增强功能,不仅如此,开发人员还可以使用新的打包工具(JEP 392) 自行发布,其中包含了 Java 应用程序,以及探索三个孵化功能,矢量 API (JEP 338)、外部链接器 API (JEP 389) 和外部内存访问 API (JEP 389),以及一项预览功能,密封类 ( JEP 397)。
与上一版本相比,全新的jdk16功能更为强大,增加了多项新特性,比如提供了全新的jpackage工具,用于打包自包含的 Java 应用程序;改进内存管理以提高性能,现在支持并发线程堆栈处理,可以将ZGC线程堆栈处理从安全点移动到并发阶段,从而消除了允许并发堆栈处理的最后一个重要瓶颈。还改进网络以提高开发人员的生产力和灵活性,现在可以向 java.nio.channels 包中的套接字通道和服务器套接字通道 API 添加了对主要 UNIX 平台和 Windows 中通用的 UNIX 域套接字的所有功能的支持。另外jdk16还解决未来不兼容的代码,以及支持将 JDK移植到 Windows/AArch64等等。
ps:本次小编带来的是jdk16.0.2 64位官方版,该版本是甲骨文公司推出的最新版本,并且下文有其详细的安装教程和环境变量配置,有需要的小伙伴快来下载使用吧。
1、338:Vector API(孵化器)
2、347:启用 C++14 语言功能
3、357:从 Mercurial 迁移到 Git
4、369:迁移到 GitHub
5、376:ZGC:并发线程堆栈处理
6、380:Unix 域套接字通道
7、386:Alpine Linux 端口
8、387:弹性元空间
9、388:Windows/AArch64 端口
10、389:外链 API(孵化器)
11、390:基于值的类的警告
12、392:打包工具
13、393:外内存访问API(第三孵化器)
14、394:instanceof 的模式匹配
15、395:记录
16、396:默认情况下强封装JDK内部
17、397:密封类(第二次预览)
一、语言增强首先在 JDK 14 中引入,在 JDK 16 中完成
1、JEP 394:instanceof 的模式匹配——通过对 instanceof 运算符的模式匹配来增强 Java 编程语言。
2、JEP 395:Records——通过记录增强 Java 编程语言,记录是充当不可变数据的透明载体的类。记录可以被认为是名义元组。
二、提高开发人员生产力的新工具
JEP 392:打包工具——提供 jpackage 工具,用于打包自包含的 Java 应用程序。
三、改进内存管理以提高性能
1、JEP 387:Elastic Metaspace – 更迅速地将未使用的 HotSpot 类元数据(即元空间)内存返回给操作系统,减少元空间占用空间,并简化元空间代码以降低维护成本。
2、JEP 376:ZGC:并发线程堆栈处理——将 ZGC 线程堆栈处理从安全点移动到并发阶段。这项工作消除了允许并发堆栈处理的最后一个重要瓶颈。
四、改进网络以提高开发人员的生产力和灵活性
JEP 380:UNIX 域套接字通道- 向 java.nio.channels 包中的套接字通道和服务器套接字通道 API 添加了对在主要 UNIX 平台和 Windows 中通用的 UNIX 域套接字的所有功能的支持。UNIX 域套接字用于同一主机上的进程间通信 (IPC)。它们在大多数方面类似于 TCP/IP 套接字,只是它们由文件系统路径名而不是 Internet 协议 (IP) 地址和端口号寻址。
五、解决未来不兼容的代码
1、JEP 396:默认强封装 JDK 内部——在 JDK 9 中,我们强封装了新的内部 API 元素,从而限制了对它们的访问。然而,为了帮助迁移,JDK 9 故意选择不在运行时强封装 JDK 8 中存在的包的内容。 JDK 16 通过默认封装 JDK 的大多数内部元素来收紧这一约束,除了关键的内部 API例如 sun.misc.Unsafe。最终用户仍然可以选择自 JDK 9 以来一直默认的宽松强封装。这将鼓励开发人员从使用内部元素迁移到使用标准 API,以便他们和他们的用户都可以轻松升级到未来的 Java 版本。
2、JEP 390:基于值的类警告——将原始包装类指定为基于值的,并弃用它们的构造函数以进行删除,提示新的弃用警告。提供有关对 Java 平台中任何基于值的类的实例进行同步的不当尝试的警告。
六、孵化和预览功能
1、JEP 338:矢量 API(孵化器) ——提供孵化器模块 jdk.incubator.vector 的初始迭代,以表达矢量计算,这些计算在运行时可靠地编译为支持的 CPU 架构上的最佳矢量硬件指令。
2、JEP 389:外部链接器 API(孵化器) ——引入了一个 API,它提供对原生代码的静态类型、纯 Java 访问。
3、JEP 393: Foreign-Memory Access API (Third Incubator) – 引入了一个 API,允许 Java 程序安全有效地访问 Java 堆之外的外部内存。
4、JEP 397:密封类(第二次预览) ——通过密封类和接口增强 Java 编程语言。密封类和接口限制哪些其他类或接口可以扩展或实现它们。
七、OpenJDK 贡献者的改进
1、JEP 347:启用 C++14 语言特性(在 JDK 源代码中) ——允许在 JDK C++ 源代码中使用 C++14 语言特性,并给出关于哪些特性可以在 HotSpot 代码中使用的具体指导。
2、JEP 357:从 Mercurial 迁移到 Git – 将 OpenJDK 社区的源代码存储库从 Mercurial (hg) 迁移到 Git。
3、JEP 369:迁移到 GitHub – 在 GitHub 上托管 OpenJDK 社区的 Git 存储库。
八、新端口在更多平台上提供对 Java 的支持
1、JEP 386:Alpine Linux Port – 将 JDK 移植到 Alpine Linux,以及在 x64 和 AArch64 架构上使用 musl 作为主要 C 库的其他 Linux 发行版。
2、JEP 388:Windows/Aarch64 端口——将 JDK移植到 Windows/AArch64。
1、删除了具有 1024 位密钥的根证书( JDK-8243559 )
安全库/java.security
以下具有弱 1024 位 RSA 公钥的根证书已从cacerts密钥库中删除:
+ alias name "thawtepremiumserverca [jdk]"
Distinguished Name: EMAILADDRESS=premium-server@thawte.com, CN=Thawte Premium Server CA, OU=Certification Services Division, O=Thawte Consulting cc, L=Cape Town, ST=Western Cape, C=ZA
+ alias name "verisignclass2g2ca [jdk]"
Distinguished Name: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 2 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
+ alias name "verisignclass3ca [jdk]"
Distinguished Name: OU=Class 3 Public Primary Certification Authority, O="VeriSign, Inc.", C=US
+ alias name "verisignclass3g2ca [jdk]"
Distinguished Name: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 3 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US
+ alias name "verisigntsaca [jdk]"
Distinguished Name: CN=Thawte Timestamping CA, OU=Thawte Certification, O=Thawte, L=Durbanville, ST=Western Cape, C=ZA
2、删除 java.awt.PeerFixer ( JDK-8253965 )
客户端库/java.awt
java.awt.PeerFixer此版本中已删除非公共类。此类用于为 JDK 1.1.1 之前创建的 ScrollPane 对象提供反序列化支持。
3、删除实验特性 AOT 和 Graal JIT ( JDK-8255616 )
热点/编译器
Java Ahead-of-Time 编译实验工具 jaotc已被删除。使用JEP295定义的 HotSpot VM 选项会 产生不支持的选项警告,否则将被忽略。
实验性的基于 Java 的 JIT 编译器 Graal JEP317已被删除。尝试使用它会产生一个 JVMCI 错误:JVMCI compiler 'graal' not found。
4、不推荐使用的跟踪标志已过时,必须替换为统一的日志等效项( JDK-8256718 )
热点/运行时
当在 Java 9 中添加统一日志时,许多跟踪标志被弃用并映射到它们的统一日志等价物。这些标志现在已过时,将不再自动转换以启用统一日志记录。要继续获得相同的日志输出,您必须明确地将这些标志的使用替换为它们的统一日志等效项。
过时的选项
-XX:+TraceClassLoading
-XX:+TraceClassUnloading
-XX:+跟踪异常
统一日志替换
-Xlog:class+load=info
-Xlog:class+unload=info
-Xlog:异常=信息
5、去除旧椭圆曲线( JDK-8235710 )
安全库/javax.crypto
SunEC 提供程序不再支持以下已过时或未使用现代公式和技术实现的椭圆曲线:
secp112r1, secp112r2, secp128r1, secp128r2, secp160k1, secp160r1, secp160r2, secp192k1, secp192r1, secp224k1, secp224r1, secp256k1, sect113r1, sect113r2, sect131r1, sect131r2, sect163k1, sect163r1, sect163r2, sect193r1, sect193r2, sect233k1, sect233r1, sect239k1, sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, X9.62 c2tnb191v1, X9.62 c2tnb191v2, X9.62 c2tnb191v3, X9.62 c2tnb239v1, X9.62 c2tnb239v2, X9.62 c2tnb239v3, X9.62 c2tnb359v1, X9.62 c2tnb431r1, X9.62 prime192v2, X9.62 prime192v3, X9.62 prime239v1, X9.62 prime239v2, X9.62 prime239v3, brainpoolP256r1 brainpoolP320r1, brainpoolP384r1, brainpoolP512r1
要继续使用这些曲线中的任何一条,用户必须找到第三方替代方案。
网友评论