Java 17史上最快,那Java 18又可以期待什么?

编译:李雪薇

近日,Java官方团队正式发布Java 17。被称为史上最快,是因为OptaPlanner网站做了一项基准测试。通过比较JDK 17、JDK 16和JDK 11来告诉你答案。平均而言,以 OptaPlanner为例的基准测试结果表明:

对于G1GC(默认),Java 17比Java 11快8.66%,比Java 16快2.41%。

对于ParallelGC,Java 17比Java 11快6.54%,比Java 16快 0.37%。

Parallel GC比G1 GC快16.39%。

既然Java 17已经是史上最快了?那么,Java18还有哪些可以期待的呢?

与此同时,Java 18也已经进入早期开发阶段。Java 18将作为标准Java版本的参考实现在明年3月发布,当下已经提出了孵化矢量API、预览记录模式和数组模式,以及采用UTF-8作为默认字符集的建议。

离正式发布Java 18还有6个月时间,但它已经初具形态,预计有4个功能提案,最新的是对矢量API的第三次孵化。截至9月20日,Java开发工具包(JDK)18的OpenJDK页面列出了矢量API、代码片段和UTF-8字符集。JEP也引用了JDK 18的记录模式和数组模式的提议。

预计在2022年3月发布的JDK 18将是一个短期功能版本,支持时间仅为六个月。可以在java.net上找到适用于Linux、Windows和MacOS的JDK 18早期访问版本。

关于JDK 18提案的细节包括:

矢量API将在JDK 18中进行第三次孵化,之前已经在JDK 16和JDK 17中孵化过。这项提议将表示在运行时编译为支持的CPU架构上的最佳矢量指令,从而实现优于等效标量计算的性能。矢量运算表达了一定程度的并行化,使更多的工作可以在单个CPU周期内完成,从而产生显著的性能改进。

与平台无关的矢量API旨在提供一种在Java中编写复杂算法的方法,使用现有的HotSpot虚拟机,但使用用户模型使矢量化更具可预测性。JDK 18还将增加对ARM标量向量扩展平台的支持,并提高在支持硬件掩码的架构上接受掩码的向量操作的性能。

记录模式和数组模式的预览,其中将使用记录模式和数组模式对Java语言进行增强,以解析记录值,并使用数组模式解析数组值。JDK 16中所包含的记录模式、数组模式和类型模式可以被嵌套,从而显著增强模式匹配的表现性和实用性。该提案的目标包括扩展模式匹配,以表达更复杂、可组合的数据查询,并且不改变类型模式的语法或语义。

将UTF-8指定为标准Java APIs的默认字符集。UTF-8是一种用于电子通信的可变范围的字符编码,被认为是网络的标准字符集。字符集是能够对网络上的所有字符进行编码的字符编码。通过此更改,依赖于默认字符集的API将在所有的实现、操作系统、地区和配置中表现一致。该提议并不打算定义新的Java标准或JDK特定的API。

支持者们认为,许多环境中的应用程序不会受到Java选择UTF-8的影响,因为MacOS、许多Linux发行版和许多服务器应用程序已经支持UTF-8。然而,在其他环境中存在风险,最明显的是依赖默认字符集的应用程序在处理默认字符集未被指定时产生的数据时将表现得不正确,数据损坏可能会悄悄发生。预计主要影响将落在亚洲地区的Windows系统用户或者服务器用户身上。

Java API文档中的代码片段,涉及为JavaDoc的标准Doclet引入@snippet标签,以简化API文档中的示例源代码。该计划的目标之一是通过提供对这些片段的API访问来促进源代码片段的验证。

虽然正确性是作者的责任,但在JavaDoc和相关工具中加强支持可以使其更容易实现。其他目标包括启用现代样式,如语法突出显示,名称与声明的自动链接,以及启用更好的IDE支持来创建和编辑代码段。该提案指出,API文档的作者经常在文档注释中包含源代码的片段。

其他可能针对JDK 18的潜在功能包括:switch表达式和语句的模式匹配(在JDK 17版本中预览),以及外部函数和内存API(在JDK 17中还处于孵化阶段)。

相关文章