JDK 24:Java 24的新功能

JDK 24:Java 24的新功能
【JDK 24:Java 24的新功能】Java 24的第一批功能包括流收集器、矢量API、类文件API、G1垃圾收集器改进以及Java原生界面不安全使用的警告 。

在9月17日发布的Java开发工具包(JDK)23之后 , JDK 24的工作已经开始 , 到目前为止 , 该版本提出了六个功能:删除Z垃圾收集器中的非代模式、流收集器、矢量API、类文件API、警告开发人员为未来使用JNI(Java原生接口)的限制做好准备 , 以及G1垃圾收集器的延迟屏障扩展 。 许多其他功能 , 包括许多已经在JDK 23中预览的功能 , 也可以包含 。
到2025年3月18日 , JDK 24已被指定为非长期支持(LTS)版本 。 与刚刚发布的JDK 23一样 , JDK 24将仅获得甲骨文六个月的高级级别支持 。 JDK 24的早期访问版本可以在jdk.java.net上找到 。
为JDK 24提出的最新和第六个功能涉及删除Z垃圾收集器(ZGC)的非生成模式 , 以降低支持两种不同模式的维护成本 。 提案指出 , 维护非代际ZGC会减缓新功能的开发 , 对于大多数用例来说 , 代际ZGC应该是比非代际ZGC更好的解决方案 。 后者最终应该被前者取代 , 以降低长期维护成本 。 该计划要求通过过时ZGenerational选项并删除非代际ZGC代码及其测试来删除非代代模式 。 非代际模式将在未来版本中过期 , 届时HotSpot JVM将无法识别它 , 后者将拒绝启动 。
为JDK 24提出的第五个功能是流收集器 , 它将增强流API以支持自定义中间操作 。 流收集器允许流管道以现有内置中间操作不容易实现的方式转换数据 。 此功能在JDK 22和JDK 23中作为预览提出 。 API将在JDK 24中最终确定 。 目标包括使流管道更加灵活和富有表现力 , 并允许自定义中间操作来操作无限大小的流 。
矢量API也为JDK 24提出了建议 。 在其第九次孵化中 , 矢量API旨在表达在运行时可靠地编译到受支持的CPU架构上的最佳向量指令的矢量通信 , 从而实现优于等效标量计算的性能 。
此API之前在JDK 16到JDK 23中孵化 。 它将在JDK 24中重新孵化 , 没有API更改 , 与JDK 23相比也没有实质性实现 。 该提案的目标包括在与平台无关的API中清晰简洁地表达广泛的矢量计算 , 在x64和AArch54架构上提供可靠的运行时编译和性能 , 当矢量计算在运行时无法表达时 , 该API会优雅地降级 , 并且仍然具有功能 , 并与Project Valhalla一致 , 利用对Java对象模型的增强功能 。
第一个JDK 24-目标功能 , 正式称为“准备限制JNI的使用” , 呼吁发布有关JNI使用的警告 , 并调整JDK 22中特色的外部函数和内存(FFM)API , 以一致的方式发出警告 。 这些警告旨在为未来的版本做准备 , 该版本通过统一限制JNI和FFM API来确保默认的完整性 。 该计划的目标包括将JNI作为与本机代码互操作的标准方式 , 为默认不允许与本机代码互操作的未来版本准备Java生态系统 , 并调整JNI和FFM API的使用 , 以便库维护者可以在不需要开发人员更改命令行选项的情况下从一个迁移到另一个 。
第二个功能 , G1垃圾收集器的延迟屏障扩展 , 旨在简化G1屏障的实现 。 G1垃圾收集器的障碍记录有关应用程序内存访问的信息 , 通过将其扩展从C2编译管道的早期转移到后期 。 目标包括在使用G1收集器时减少C2编译的执行时间 , 使对C2缺乏深刻理解的HotSpot开发人员能够理解G1障碍 , 并保证C2保留内存访问、安全点和障碍的相对顺序的不变性 。 第四个功能是在速度和大小方面保持C2生成的JIT(及时)编译代码的质量 。
第三个功能 , 类文件API , 之前在JDK 22和JDK 23中预览 , 将在JDK 24中最终确定 , 并进行小幅更改 。 此API提供了一个用于解析、生成和转换Java类文件的标准API 。 它旨在提供一个用于处理类文件的API , 该API跟踪Java虚拟机规范定义的类文件格式 。 第二个目标是使JDK组件能够迁移到标准API , 并最终删除JDK对第三方ASM库的内部副本 。 自第二次预览以来的更改包括重命名枚举值、删除一些字段、添加方法和方法过载、重命名方法以及删除被认为不必要的接口和方法 。
针对JDK 24的附加功能将在未来几个月内确定 。 潜在的Java 24功能包括在JDK 23中预览的功能的进一步预览或最终发布 。 这些包括模块导入声明 , 用于简明地导入模块导出的所有软件包并简化模块化库的重复使用;结构化并发 , 以简化并发编程;范围值 , 用于共享不可变数据;以及灵活的构造函数体 , 使开发人员在表达构造函数行为方面有更大的自由 。
JDK 23预览中的另一个功能 , 也是JDK 24的竞争者是模式、实例和开关中的原始类型 , 其目的是通过允许在所有模式上下文中使用原始类型模式来增强模式匹配 , 并扩展instanceof和switch以与所有原始类型配合使用 。 提前加载类 , 一个旨在加快Java启动速度的功能 , 以及字符串模板 , 一个在JDK 21和JDK 22中预览但从JDK 23中删除的功能 , 也可以针对JDK 24 。
最近的LTS版本JDK 21于2023年9月发布 , 将获得甲骨文至少五年的Premier支持 。 下一个LTS版本JDK 25将于2025年9月到期 。 LTS版本主导了Java的采用 , 这意味着随着用户等待JDK 25 , JDK 23和JDK 24的采用可能是低端的 。

    推荐阅读