17611538698
info@21cto.com

JDK 26 的新特性和令人兴奋的功能

编程语言 0 14 1天前

导读:在JDK26中,Java 的库和运行时环境有很多重要的变化与改进。

图片

随着Oralce发布 JDK 26,我们已经发现并见证了 Java 在每六个月发布一个版本的周期内完成了 17 个版本的迭代。

这对于Java语言来说无疑是一项巨大成功。

在过去的几年来,Java 平台的发展速度达到了历史最高水平。此外,更快的发布周期也使得预览功能和孵化模块变为现实。这能让开发者能够在功能最终定稿之前对其进行测试,并根据反馈进行改进。在实际可行的范围内,Java 开发者能够获得他们真正想要的新功能。

值得一提的是,JDK 26 是第一个没有将任何预览功能正式定型的 Java 版本。

那么,JDK 26 究竟为开发者们带来了哪些新功能?

目前共有 10 个JDK 增强提案(JEP),这是 OpenJDK 项目中定义新功能的机制。虽然数量略低于平均水平,但值得开发者们注意的是,它并非长期支持 (LTS) 版本。

OpenJDK 发行版承诺为 Java 的 LTS 版本提供扩展维护和支持,因此它们更常用于生产环境。但这并不意味着 JDK 26 不具备生产级质量;如果您使用频繁部署的CI/CD流水线,JDK 26 将非常适合运行此类应用程序。

让我们一一按类别来分析这些新特性:Java 语言、库和运行时。

Java 语言的改进


此处是与语言相关的特性是模式中原始类型的持续发展(JEP 530),instanceofswitch目前已进入第四个预览版。

尽管 Java 是一种面向对象的语言,但它并非将所有事物都视为对象,它保留了原始值以提高性能。此 JEP 允许在以前需要引用类型的地方使用原始类型。

此外,JDK26还进行了一些更改以解决将原始类型(例如 `int` int)与引用类型(例如包装类 `int` Integer)组合使用时发现的问题。

Java 库的改进


JDK 26 的大部分变化都体现在库中。下面,以列表形式描述:

  • JEP 517:HTTP 客户端 API 的 HTTP/3 支持。HTTP 客户端 API 已得到增强,以便支持最新的 HTTP/3 协议。HTTP/3 不再使用 HTTP/2 及更早版本所依赖的 TCP,而是使用基于 UDP 的 QUIC 协议。这在无需任何代码更改(只需在创建连接时指定协议)的情况下,即可提供更佳的性能。

  • JEP 524:加密对象的 PEM 编码。公钥、私钥、证书和证书吊销列表等加密对象通常通过电子邮件传输,而隐私增强邮件 (PEM) 格式非常适合这种用途。此 JEP 添加了一个简洁的 API,用于在 PEM 文本和加密对象之间进行相互转换。

  • JEP 525:结构化并发支持。编写协作式多线程代码向来难度极高。Java 在其开发历程中不断添加各种特性来简化这一过程,例如并发实用工具 API、ForkJoin 框架以及最近的虚拟线程。结构化并发进一步丰富了这一工具箱,它将运行在不同线程中的相关任务组视为单个工作单元。这使得错误处理和取消机制得以简化,从而提高了可靠性并增强了可观测性。开发者对这种方法并不会感到陌生,它类似于 try-with-resources 语法。

  • JEP 526:惰性常量。它之前曾被称为“稳定值”,但新名称更能体现该特性的目标:提供保存不可修改数据的对象。虽然 Java 有 final 字段,但惰性常量在初始化时间方面提供了更大的灵活性。

  • JEP 529:向量 API。该 JEP 目前已进入孵化阶段第十一次,创下了 JEP 孵化次数的纪录。由于该 API 是更大的 Valhalla 项目的一部分,因此只有在该项目的更多内容被整合到 Java 平台后,它才会最终定稿。在该 API 中,向量指的是现代处理器中可用的超宽寄存器。特定的指令允许在单个时钟周期内,对这些寄存器中的多个值执行相同的操作,从而显著提高数值密集型操作(例如 AI)的性能。虽然 JIT 编译器会自动对识别到的代码进行向量化,但它无法在所有可以使用向量的情况下都进行向量化。借助向量 API,开发人员可以显式地指定 JIT 编译器如何使用向量操作。

  • JEP 504:移除 Applet API。Applet 是 Java 最初发布时真正使其走向成功的关键。然而,浏览器(Applet 曾经使用的地方)早已发展到如今的水平,主流浏览器不再支持运行 Applet 所需的 Java 插件。

    Java 相关插件技术已从Oracle JDK 11 中移除,不属于 OpenJDK 项目,并且仍然是闭源的。Applet API 是最后一个剩余的组件,自 JDK 17 起已被弃用并计划彻底移除。


Java运行时的技术改进


JDK 26还有一些运行时的变更:

  • JEP 500:准备将finalmean 改为 final。如前所述,Java 具有final字段的概念,字段的值只能设置一次。虽然final不能简单地通过赋值来修改字段,但在某些情况下,仍然可以通过称为深度反射的特性来更改其值。这样便限制了 JVM优化性能的能力,因为它仍然需要应对可能发生的更改。此 JEP 明确告知开发人员,在未来的版本中,你将无法再以这种方式使用深度反射,因此你应该提前修改源代码。

  • JEP 516:支持任何垃圾回收器的预加载(AOT)对象缓存。这是 OpenJDK Leyden 项目的一部分,该项目的目标是缩短应用程序达到最佳性能所需的时间。由于需要在应用程序运行时识别并编译常用代码,因此应用程序的性能无法立即达到全速运行。此 JEP 使 AOT 缓存(包含已加载和已初始化类的数据)能够与任何垃圾回收器协同工作。这是因为 ZGC 垃圾回收器无法与 AOT 缓存兼容。

  • JEP 522:G1 GC 通过减少同步来提高吞吐量。G1 是 HotSpot VM 中的默认垃圾回收器,在许多情况下都能很好地工作。此 JEP 通过减少 GC 和应用程序线程之间所需的同步量来提高该回收器的效率。这对应用程序代码是透明的。


总体来说,尽管 JDK 26 包含的 JEP 数量不如某些版本那么多,但它仍然为 Java 平台增添了许多新鲜、实用且有趣的新功能。

另外,JDK 26 也不是 LTS 版本,但开发者仍然应该使用此版本测试他们的应用程序,这样可避免在明年发布下一个 LTS 版本 JDK 29 时出现累积型问题。

作者:场长

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信