苏三的免费八股文网站: www.susan.net.cn
前两天,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面试宝典](https://mp.weixin.qq.com/s?__biz=MzI3NzE0NjcwMg==&mid=2650199544&idx=1&sn=4bf24498071d079058ee8e89edb7899a&scene=21#wechat_redirect))
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的,并且更新也没啥特别的,完全可以再等等。
最后欢迎 加入苏三的星球 ,你将获得:苏三AI项目、 商城微服务实战、秒杀系统实战 、 商城系统实战、秒杀系统实战、代码生成工具、系统设计、性能优化、技术选型、底层原理、Spring源码解读、工作经验分享、痛点问题、面试八股文等多个优质专栏。
还有1V1答疑、修改简历、职业规划、送书活动、技术交流。
目前星球已经更新了5200+篇优质内容,还在持续爆肝中.....
星球已经被官方推荐了3次,收到了小伙伴们的一致好评。戳我加入学习,已有1600+小伙伴加入学习。
苏三的免费八股文网站: www.susan.net.cn