1.本周,甲骨文发布了Java的最新版本——Java 24,引入数千项改进和20多项新特性。
2.其中,JEP 488、492、494等特性提升了Java语言的一致性、表达能力和生产力。
3.同时,Java 24还提供了对AI和后量子加密的支持,为开发者提供了强大的工具。
4.然而,尽管Java 24已发布,仍有不少开发者坚持使用Java 8。
5.未来,Java 24将继续推进安全性和稳定性,逐步弃用和移除不安全的功能。
以上内容由腾讯混元大模型生成,仅供参考
【CSDN 编者按】作为全球最受欢迎的编程语言之一,本周 Java 24 正式发布。Java 24不仅延续了其卓越的传统,而且通过引入一系列创新性的特性和改进,再次证明了自己在推动现代软件开发进步方面的核心地位。从支持AI和后量子加密的新功能到对开发者生产力的显著提升,Java 24展示了Oracle与全球Java社区紧密合作的成果。
本周,甲骨文正式发布了 Java 的最新版本——Java 24(Oracle JDK 24)!
据官方介绍,Java 24 引入了数千项改进,以及 20 多项涵盖 Java 各个方面的新特性,包括 AI 支持和后量子加密能力,为开发者提供了构建创新型 AI 应用的强大工具。正如 IDC 软件开发研究副总裁 Arnal Dayaratna 所说:“Java 24 再次证明,Java 在企业级、关键任务应用的开发领域拥有无可匹敌的优势。”
下面,让我们一起来看看 Java 24 都带来了哪些新功能。
语言特性
JEP 488:模式、instanceof 和 switch 中的原始类型(第二次预览版)
该特性提升了 Java 语言的一致性和表达能力,提高了开发者的编程效率。通过消除模式匹配、instanceof 和 switch 语句中对原始类型的限制,使模式匹配更加灵活。开发者可以在所有模式上下文中使用原始类型模式,并扩展了 instanceof 和 switch 以支持所有原始类型。对于涉及 AI 推理(AI inferencing)的应用开发者而言,这一改进尤为重要。
JEP 492:灵活的构造函数体(第三次预览版)
通过在构造函数体中引入两个独立的“前序(prologue)”和“后序(epilogue)”阶段,提升代码的可靠性。这使得开发者能够更自然地组织构造方法中的逻辑,而无需依赖辅助的静态方法、中间构造方法或额外的构造参数。此外,该特性保留了现有的保护机制,确保子类代码不会干扰父类的实例化,从而增强类的可靠性,特别是在方法被重写时。
JEP 494:模块导入声明(第二次预览版)
该特性提升了开发者的生产力,使其可以快速导入模块导出的所有包,而无需强制导入代码本身位于模块内。这简化了对模块化库的复用,让所有开发者(尤其是初学者)可以更轻松地使用第三方库和 Java 基础类,无需了解其复杂的包层级结构。此外,该特性还便于开发者快速集成业务逻辑,与 AI 推理、库或服务调用进行对接。
JEP 495:简化源文件与实例 main 方法(第四次预览版)
该特性降低了 Java 学习门槛,让初学者也能在不了解复杂语言特性的情况下编写第一个 Java 程序。因此,教育者和培训讲师可以循序渐进地引导学生学习 Java 语言,学生则可以编写简化的单类程序声明,并随着技能提升逐步扩展程序,引入更高级的语言特性。此外,经验丰富的 Java 开发者可以简洁高效地编写小型程序,而无需使用为大型项目设计的工具。
库
JEP 485:流收集器(Stream Gatherers)
增强 Stream API,以支持自定义中间操作,使数据流管道能够以更灵活的方式转换数据,从而提升代码的可读性、可维护性和效率。
JEP 484:类文件 API
提供标准 API,用于解析、生成和转换 Java 类文件,确保与 Java 虚拟机(JVM)规范的类文件格式保持一致,帮助开发者提高生产力。
JEP 487:作用域值(Scoped Values,第四次预览版)
支持在多线程环境下共享不可变数据,提升代码的可读性、可维护性和性能。
JEP 489:向量 API(第九次孵化)
引入向量计算 API,能够在支持的 CPU 架构上将代码即时编译为高效的向量指令,从而提升 AI 推理和计算密集型应用的性能。
JEP 499:结构化并发(第四次预览版)
优化多线程代码的可维护性、可靠性和可观测性。通过结构化并发 API,将多个相关线程视为 一个工作单元,减少线程泄漏和取消延迟等常见并发问题。
安全库
JEP 478:密钥派生函数 API(预览)
提升数据在传输中的加密安全性,助力 Java 应用适应未来量子计算时代的安全挑战,同时也提高了机密性和通信完整性。
JEP 496:抗量子模块格基密钥封装机制(ML-KEM)
通过提供抗量子攻击的模块格基密钥封装机制(ML-KEM)实现,增强了Java应用的安全性。该功能是迈向后量子准备的重要一步,并最终为 Java 平台提供后量子加密(PQC)支持。
JEP 497:抗量子模块格基数字签名算法(ML-DSA)
提供抗量子攻击的模块格基数字签名算法(ML-DSA),防止数据篡改并确保签名者身份安全,进一步提升 Java 应用的安全性。ML-DSA 旨在抵御未来的量子计算攻击,并已获得美国国家标准与技术研究院(NIST)FIPS 204 认证。
工具
JEP 493:无需 JMOD 即可链接运行时镜像
即使没有 JMOD 文件,也可以通过启用 jlink 工具创建自定义运行时镜像。这不仅能帮助开发者提高效率,还可以将 JDK 的大小减少约 25%。因此,无论模块是独立的 JMOD 文件、模块化的 JAR 文件,还是先前链接的运行时镜像的一部分,开发者都可以从模块创建运行时镜像。注意,此功能必须在构建 JDK 时启用;默认情况下不会启用,有些 JDK 供应商可能会选择不启用。
性能与运行时更新
JEP 450:紧凑对象头(实验性)
减少 HotSpot JVM 对象头大小,从 96-128 位缩小到 64 位,帮助开发者提高生产力,优化内存占用,提高数据局部性。
JEP 475:G1 的延迟屏障扩展
将 G1 垃圾收集器的屏障扩展从 C2 JIT 编译管道的早期阶段转移到后期阶段,帮助开发者提高效率并减少了开销。这简化了 G1 垃圾收集器障碍的实现,提高了 C2 生成代码的效率、可理解性、弹性和质量。
JEP 483:提前类的加载与链接
在 HotSpot Java 虚拟机启动时立即提供应用程序的类,使其处于已加载和已链接状态,提高开发者生产力并改善了启动时间。此功能不需要使用 jlink 或 jpackage 工具,不需要更改命令行启动应用程序的方式,也不需要更改应用程序、库或框架的代码。
JEP 490:ZGC:移除非分代模式
移除 Z 垃圾收集器(ZGC)的非分代模式,降低了维护两种不同模式的成本。
JEP 491:同步虚拟线程而不锁定
扩展使用同步方法和语句的 Java 代码和库的可扩展性,帮助开发者提高生产力。该功能允许虚拟线程释放其底层平台线程,让开发者能够访问更多的虚拟线程来管理应用程序的工作负载。
源代码
JEP 404:分代 Shenandoah(实验性)
该特性增强了 Shenandoah 垃圾回收器(GC),引入实验性的分代回收机制,以提高 Java 应用的持续吞吐能力,增强负载波动的适应性并优化内存使用。这一改进帮助开发者更高效地管理 Java 应用的内存回收,使系统在高负载情况下依然保持稳定。
JEP 479:移除 Windows 32 位 x86 端口
移除了 Windows 32 位 x86 端口的源码和构建支持,简化了 JDK 的构建和测试流程,有助于提高开发效率,并减少对旧架构的维护成本。
JEP 501:弃用 32 位 x86 端口以准备移除
该提案将 32 位 x86 端口标记为弃用,计划在未来版本中彻底移除。这一决策有助于 Java 生态逐步转向现代硬件架构,使开发者能够更快地采用新特性,而无需考虑对 32 位 x86 体系结构的兼容性。
此外,Oracle 将继续推进 Java 的安全性和稳定性,包括引入现代、安全的功能,同时逐步弃用和移除不安全的功能。据悉 Java 24 版本之后,以下功能将在未来版本中被移除:
(1)JEP 472:准备限制 JNI(Java Native Interface)的使用;
(2)JEP 486:永久禁用 Java 安全管理器(Security Manager);
(3)JEP 498:对 sun.misc.Unsafe 中的内存访问方法发出警告。
至此,更多关于 Java 24 的最新发布内容,将在 2025 年 3 月 18-20 日于加州红木海岸举行的 JavaOne 2025大会上揭晓。
开发者:你发任你发,我用 Java 8
颇为有趣的是,尽管 Java 24 已经发布,目前仍有不少开发者在依旧坚持使用 Java 8:“你发任你发,我用 Java 8”,“用啥 Java 24,Java 8 用到世界毁灭”。
不过,也有许多人指出 Java 8 已经过于落后,相比之下 Java 17、Java 21 是更多人的选择:
“Java 8 只支持到 springboot2,但是 springboot2 里面很多组件有漏洞,已经不能通过公司的安全审计了。”
“开源三方件都慢慢不支持 Java 8 了,除非你开源三方件也不准备更新了。”
“现在新项目都是 17、21 起步了,别说 8 了,11 都不考虑了,太老了实在是。”
那么,你现在用的又是哪个版本的 Java 呢?