Zademy

JDK 25 LTS:爆炸性性能、极致生产力和重复代码的终结

Java
Java; JDK25
1797 字

你好,开发者和Java爱好者们!

Java 25已经到来,作为长期支持(LTS)版本,巩固了平台所采取的现代化道路。这次更新不仅仅是技术更新,而是一项战略投资,直接转化为更清洁的代码、更好的性能和运营成本的显著降低

Oracle已确认JDK 25将获得至少8年的延长支持,为企业规划提供长期稳定性。

以下,我们探讨所有开发者和技术领导者都应该了解的关键改进。

性能改进:更少的延迟,更多的节省

Java 25运行时的优化提供了显著的改进,甚至无需修改一行代码。

性能比较:JDK 21 vs. JDK 25以及从Java 8的飞跃

标准化基准测试(如SPECjbb2015)显示效率的显著提升:

性能指标迁移到JDK 25的收益含义
关键延迟(Critical JOPS)约减少10%更一致和可预测的性能。
最大吞吐量(Max JOPS)约增加5%更高的处理能力(吞吐量)。
云成本节省通常减少20-30%对CPU和内存资源的需求更少。

如果你仍在使用Java 8,迁移到JDK 25代表延迟性能提升超过100%。在云基础设施方面,这可能意味着资源支付减少三分之一

性能的关键特性

紧凑对象头(JEP 519)

此功能现已稳定,在64位架构上将虚拟机HotSpot的对象头大小从96/128位减少到仅64位。这直接影响内存:

  • 内存占用(堆)减少:观察到堆内存使用量减少高达22%,小对象大小减少20%。
  • 缓存效率提高: 对象变小后,可以在CPU的L1、L2和L3缓存内存中容纳更多,从而执行更快

AOT方法分析(JEP 515)

改进应用程序的启动时间和"预热"时间。JVM HotSpot现在可以使用先前执行的方法执行配置文件,允许JIT(Just-In-Time)编译器在启动时立即生成最佳本机代码,而不是等待实时收集数据。

Java Flight Recorder(JFR)改进

JDK 25为JFR引入了重要改进:

  • CPU Time Profiling:在Linux上更精确地捕获CPU分析信息
  • Cooperative Sampling Improvements:协作采样改进
  • Method Timing & Tracing:改进的方法计时和可追溯性

开发者生产力:写得更少,实现更多

Java 25引入了简化语法并消除样板代码的语言特性,使代码更具表现力、简洁和可读性。

生产力新功能描述关键优势
极简Main / 紧凑文件(JEP 512)允许编写main方法而无需显式声明类或包。非常适合初学者和编写快速脚本,使Java更接近现代语言。
Switch中的模式匹配包括在switchcase中直接解构records,以及用逗号分隔的替代方案分组。更简洁和声明性的代码。
匿名模式 _允许使用下划线_显式忽略record的组件或未使用的变量。避免未使用的变量并记录代码意图。
模块导入声明(JEP 511)允许简洁地导入模块导出的所有包(例如import module java.base;)。简化imports管理,减少样板

此外,在patternsinstanceofswitch中使用原始类型(第三次预览,JEP 507)为语言增加了更大的一致性和表现力。

并发和稳定性:Null-Safe的未来

Java 25继续在Virtual Threads(在JDK 21中引入)的基础上构建,提供简化高度并发应用程序处理的工具。

Scoped Values(JEP 506):ThreadLocal的继任者

Scoped ValuesThreadLocal的现代替代品,专门设计为与Virtual Threads安全高效地工作

  • 不可变性:ThreadLocal不同,值一旦定义就是不可变的,消除了副作用。
  • 有限范围: 值仅存在于其执行块内(ScopedValue.where(…).run(…)),并在退出时自动消失,避免内存泄漏

虽然Virtual Threads由于连接池瓶颈,在数据库密集型负载中并不总是提高性能,但其主要优势是开发者生产力,允许消除响应式编程的复杂性并返回到简单的Thread-per-Request模型。

结构化并发(Structured Concurrency,第五次预览)(JEP 505)

此API将在不同线程中执行的相关任务组视为单个工作单元。这简化了错误管理、取消并提高了并发代码的可观察性。

稳定性奖励:JSpecify

虽然不是直接的JEP,但在Spring Framework 7等关键frameworks中采用JSpecify(用于指示nullability的开放标准)是一大步。这允许工具(IDE、静态分析器)统一理解值是否可以为null使我们更接近在Runtime时结束可怕的NullPointerException

JDK 25的其他改进

编译器和运行时改进

  • 编译器改进:JIT编译器的优化以生成更高效的代码
  • 运行时改进:JVM运行时的改进以提高整体性能
  • 垃圾收集器改进:垃圾收集器的优化以减少暂停

JDK库改进

  • JDK库改进:各种JDK库的改进以提高功能和性能

迁移注意事项

如果你的组织正在评估迁移到JDK 25,重要的是要考虑:

  1. LTS支持: Java 25提供强大的支持,减少了大规模迁移的频率。
  2. x86 32位支持终止: JDK 25取消了对32位x86架构的支持,因此你必须确保所有操作系统都是64位的。
  3. 安全模型变更: Security Manager已被永久禁用,其API将在未来版本中删除。建议迁移到基于模块系统或容器安全的现代安全模型。

现在迁移到JDK 25不仅可以提高应用程序的性能,还可以通过更强大、更安全、更易用的平台为AI和高并发时代准备你的代码

理解性能改进的隐喻

想象一下,你以前的Java应用程序就像一个传统图书馆:每本书(对象)都有一个巨大的目录卡(96/128位对象头),占用了书架(内存)上的大量空间。通过JDK 25的紧凑对象头,就像你已经数字化了所有这些卡片,将它们减少到紧凑的QR码(64位)。现在你可以在同一空间中存储更多的书,更快地找到它们,并更灵活地在图书馆中移动。

结论

JDK 25 LTS代表了Java演进的重大飞跃,结合了卓越的性能改进和提高开发者生产力的功能。内存优化、更快的启动和简化的语法使此版本成为寻求降低运营成本同时提高代码质量的组织的必备更新。

对于开发者来说,这些新功能提供了编写更清洁、更安全、更高效代码的完美机会,为AI和大规模并发时代的现代应用程序挑战做好准备。

Java的未来就在这里,它比以往任何时候都更快、更高效、更令人兴奋.