前两天,Java 24正式GA了,这次一共发布了24个JEP
挑几个重点说说。
499: Structured Concurrency
JDK 21中Kotlin、Swift致敬,而推出的结构化并发,已经来到了第四次预览。
Java的结构化并发(Structured Concurrency)是JDK 21引入的预览特性(JEP 453),旨在简化并发编程的复杂性,解决传统多线程模型(如ExecutorService
、Thread
)的痛点。
它通过作用域(Scope) 将并发任务组织为一个结构化单元,确保子任务的生命周期与作用域绑定,并实现自动资源管理和异常集中处理。
传统模型依赖手动管理线程/任务生命周期(如ExecutorService.shutdown()
),容易遗漏未完成任务,导致线程泄漏。
有了结构化并发后,通过StructuredTaskScope
作用域,任务自动关联生命周期,在作用域结束时(如try-with-resources
块外),所有子任务强制取消或等待终止,并释放资源。
491: Synchronize Virtual Threads without Pinning
还有就是,我之前在我的八股文讲过的在synchronized代码块或者方法中使用虚拟线程,会导致虚拟线被绑定物理线程上。
这个版本中已经做了解绑,这样就可以大大提升并发度和吞吐量了。可以愉快的虚拟线程中使用synchronized了。
和虚拟线程有关的还有一个就是JDK 24开始不再支持Windows 32 位 x86版本了,因为他无法实现虚拟线程,只能用内核线程。
404: Generational Shenandoah
那个被认为是G1的继任者,摒弃分代模型的Shenandoah GC在JDK24中升级为正式功能了,用了它,将进一步把GC耗时控制在10ms以内。
Shenandoah GC 是一种针对低停顿时间优化的垃圾回收器,通过并发执行大部分垃圾回收任务(包括内存压缩)显著减少应用程序的停顿时间。Shenandoah 的设计目标是将停顿时间与堆大小解耦。无论是 2GB 还是 200GB 的堆,其停顿时间均可控制在相似水平,避免因堆膨胀导致长暂停。
Shenandoah GC 使用时,堆内存被划分为独立的区域(Region),但不采用传统的分代模型(如年轻代/老年代)。每个区域可根据对象存活情况自主管理,避免分代切换的复杂性。(Java面试宝典)
与G1GC的差异:两者均基于区域划分,但G1保留分代模型,而Shenandoah完全摒弃分代,简化了回收逻辑,更适合需要持续低延迟的场景
与ZGC的定位相似:两者均追求亚毫秒级停顿,但Shenandoah的压缩机制更注重并发执行,而ZGC依赖染色指针技术
488: Primitive Types in Patterns, instanceof, and switch (Second Preview)
instanceof大家都熟悉,在最开始只支持对象类型,现在开始支持基本数据类型了。这么做的好处就是可以减少拆装箱的开销。
这样就可以大大提升switch模式匹配的能力。如:
switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; default -> "unknown status: " + x.getStatus();}
485: Stream Gatherers
JEP485(Stream Gatherers)是 JDK 24 的正式功能,旨在为 Java 的 Stream API 提供自定义中间操作的支持,解决现有内置中间操作(如 map()、filter())难以覆盖的复杂场景。(Java面试宝典)
JEP485 引入 Gatherer 接口,允许开发者定义 自定义中间操作,将数据转换方式扩展到一对一、多对一、多对多等复杂模式,并支持高效并行处理。其设计目标是“让流式管道能够以前置中间操作无法实现的方式转换数据”。
如实现窗口化分组:
Stream.iterate(0, i -> i+1) .limit(8) .gather(Gatherers.windowFixed(3)) // 固定窗口大小为3 .toList(); // 输出 [[0,1,2], [3,4,5], [6,7]]
实现累计计算:
Stream.of(1, 2, 3, 4, 5) .gather(Gatherers.fold(() -> 0, Integer::sum)) .forEach(System.out::println); // 输出 15
498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe
sun.misc.Unsafe的内存访问方法(如直接操作内存或绕过Java安全检查)长期未受支持,已被终端弃用(在JDK 23中),但因其广泛使用而未被立即移除。这些方法可能导致程序崩溃(如未经检查的内存操作)、性能下降(如因绕过优化导致JVM无法优化代码)或安全漏洞。
为最终移除
Unsafe
的内存访问方法铺平道路,同时避免因直接删除导致的兼容性问题。通过警告推动开发者迁移,确保应用平稳过渡到标准化API
496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
这两个JEP都专注于后量子密码学。首先是为 Java 平台引入抗量子的模块-基于格的密钥封装机制(ML-KEM),增强 Java 应用的安全性,使其逐步适配后量子加密(PQC)标准。
并引入抗量子密码学中的模块格(Module-Lattice)数字签名算法(ML-DSA),以增强 Java 安全性,使其能够抵御未来量子计算机的攻击。
要不要升级?
不用!这个版本不是LTS的,并且更新也没啥特别的,完全可以再等等。
(-End-)
文中提到的我的八股文,是我出的后端java面试宝典,目前已经有110多万字了,1100+道题。场景题已经有100+了。
而且每道题都有详细答案,这个答案不是说随随便便几句话的,也不是东拼西凑的,更不是AI生成的。
每一篇都包含了典型回答和扩展知识,帮助大家更好的理解着去学习。
我们会持续更新内容,争取做到全网最新、最全、最准确的Java后端面试宝典。
(长按扫码去下单)
很多人也通过这份宝典上岸了(目前已知最高的拿到年包80的Offer,很多人上岸阿里、美团、快手、华为、滴滴、携程、小红书等中大厂),趁现在还未涨价,有需要的抓紧上车吧。
在线课程,文字形式,永久更新。
八股文详细介绍:Java面试宝典更新介绍
下单后,不满意3天内可以无条件退款!只要你觉得它是任何一个市面上可以看到的面试题库可以比拟的,不管别人卖多少钱,只要你有这种感觉了,都直接来退款!就是这么自信!!
(下单后按照短信提示申请权限并联系客服审批即可)