首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《Java 演进之路》系列 · 第 19 篇

《Java 演进之路》系列 · 第 19 篇

作者头像
DevLlama
发布2026-06-01 20:20:22
发布2026-06-01 20:20:22
730
举报

Java 23 发布:ZGC 默认分代,模式匹配支持基本类型

将应用的垃圾回收器切换为 ZGC 后,发现分代模式已自动启用——那一刻真切感受到,Java 正在一步步贴合生产环境的实际诉求。

2024年9月17日,JDK 23正式发布了。它是JDK 22之后的又一个短期版本,生命周期还是半年。说实话,很多开发者都觉得,这种短期版本没什么大用处,用完半年就过时了,但我不这么看:正是这些小版本一点点打磨、试错,后续的LTS版本才能足够稳定、足够好用,也能看出来,Java社区是真的在替我们开发者考虑,注重实际的使用体验。

作为非LTS版本,这次更新的优化都藏在细节里:ZGC分代模式默认开启,开始清理Unsafe这类高危API,switch也能直接匹配int类型了。这些改动要么优化底层性能,要么方便日常编码,精准解决了我们实际开发中的痛点。

JDK 23 官方特性总览

所有特性均严格遵循 JSR 398(《Java SE 23 发布规范》) 制定。作为一款典型的短期版本,它的核心发力方向集中在三点:

  • 1. 生产级能力落地:将分代 ZGC 设为默认配置,同时启动对 Unsafe 等高危 API 的清理工作。
  • 2. 语言表达能力升级:补齐基本类型模式匹配的短板,为 Stream API 新增自定义扩展能力。
  • 3. 开发体验现代化:支持用 Markdown 编写文档注释,简化单文件程序的启动方式。

1. ZGC 分代模式默认启用(JEP 474)

这应该是 JDK 23 里最实用的一个更新了,没有之一。熟悉 Java 的朋友都知道,ZGC(Z垃圾回收器)刚出来的时候,最吸引人的就是“亚毫秒级停顿”,所以很多对延迟要求高的应用,比如金融交易、高并发接口,都优先用它。不过它之前有个小遗憾,就是分代模式得手动开启,而这个模式是 JDK 21 就加了的,经过两个版本的打磨,这次 JDK 23 终于把它设成默认了,不用再额外配置,太省心了。

  • 核心价值:开启分代模式后,ZGC 的 CPU 占用率能明显降下来,官方说最高能减 20%,而且最关键的是,它的超低延迟优势一点没丢,这才是最实在的。
  • 实际影响:以前 ZGC 总觉得是“特殊场景专用”,只有极端低延迟需求才会用,现在不一样了,它完全能当通用 GC 用,适配大多数普通应用。我们开发者只要升级到 JDK 23,啥也不用改,就能直接享受到这个性能提升,相当于白嫖一份福利。

2. 准备移除 sun.misc.Unsafe 的内存访问方法(JEP 471)

这是 Java 生态清理历史包袱的一个里程碑式动作。sun.misc.Unsafe 对 Java 开发者而言,一直是一把“双刃剑”——它提供了直接操作内存的底层能力,却也带来了极大的安全隐患和稳定性风险,稍有不慎就可能导致 JVM 崩溃。

  • JDK 23 的具体动作:正式将 Unsafe 中用于堆外内存分配、访问的一系列方法(如 allocateMemorygetLongputInt 等)标记为“弃用待移除”(Deprecate for Removal)。
  • 背后意义:这一举措明确传递出一个信号:FFM API(外部函数与内存 API)已成为官方认可的、安全的替代方案。第三方库开发者不能再依赖这些高危的“后门”方法,必须尽快推进迁移工作,这对 Java 生态的长期稳定与安全至关重要。

3. 基本类型模式匹配(预览,JEP 455)

这是 JDK 23 中最让人惊喜的语言特性。过去几年,Java 的模式匹配功能一直在稳步演进,但始终存在一个尴尬的短板:无法直接对 intdouble 等基本类型进行模式匹配,必须先将其装箱为 IntegerDouble 等包装类型。

如今,开发者可以直接对基本类型进行字面量匹配,代码更简洁、更高效:

代码语言:javascript
复制
// JDK 23 (预览)
switch (obj) {
    case int i -> System.out.println("Got an int: " + i);
    case double d -> System.out.println("Got a double: " + d);
    case String s -> System.out.println("Got a string: " + s);
}

这一改进彻底打破了基本类型与引用类型在模式语法上的割裂感,让代码编写更符合开发者的直觉,同时避免了装箱拆箱带来的性能损耗。

注意:该特性在 JDK 23 中处于预览阶段,编译和运行时需添加 --enable-preview 参数。

🧩 为何要关注 JDK 23?

  • 生产级优化触手可及:ZGC 分代模式默认启用,相当于给所有开发者送上一份“性能福利”,无需额外配置,就能让更多应用享受到超低延迟 GC 带来的提升。
  • 生态健康持续升级:弃用 Unsafe 高危方法,是 Java 生态向更安全、更健壮方向迈进的关键一步,为后续生态规范化发展奠定了基础。
  • 语言能力趋于完善:基本类型模式匹配的加入,补齐了 Java 模式匹配体系的最后一块短板,让模式匹配的使用更全面、更便捷。

🧱 其他关键更新

  • Markdown 文档注释(JEP 467):标准 Doclet 已支持解析 Markdown 语法,彻底告别了以往编写 JavaDoc 时繁琐的 HTML 标签,让高质量文档注释的编写变得更轻松。
  • 结构化并发(第三预览,JEP 480):将多线程任务的管理简化到接近单线程编程的难度,同时保障安全性,大幅优化了并发场景下的错误处理和资源管理,让并发代码更易维护。
  • Scoped Values(第三预览,JEP 481):相较于 ThreadLocal,提供了更安全、高效的不可变上下文数据传递方式,与结构化并发特性天然契合,适配复杂并发场景。
  • Stream Gatherers(第二预览,JEP 473):为 Stream API 新增了强大的自定义中间操作能力,诸如滑动窗口、数据批处理等以往难以实现的操作,如今都能轻松完成,填补了现有 Stream 操作的空白。
  • 隐式主类和实例 main 方法(第三预览,JEP 477):支持直接编写 void main() { ... },无需显式声明类,极大减少了脚本编写和教学示例中的冗余代码。
  • Vector API(第八孵化器,JEP 469):持续优化 SIMD 向量化计算性能,进一步完善对不同硬件平台的适配,为 AI、科学计算等高性能场景提供更坚实的支撑。
  • 准备禁用 SecurityManager(JEP 472):正式迈出移除 SecurityManager 的关键一步,该组件不仅复杂度高,且实际应用中极少被正确使用,移除后将简化 Java 安全模型,降低维护成本。

✅ 总结

JDK 23 依据 JSR 398 规范,完成了一次聚焦痛点、务实高效的版本迭代。它没有追求噱头式的宏大概念,而是将重心放在解决开发者日常编码、生产运维中的实际问题上。分代 ZGC 设为默认,是给开发者的一份“性能大礼”;弃用 Unsafe 高危方法,是对 Java 生态长远健康的投资。与此同时,基本类型模式匹配、结构化并发等前沿特性的持续打磨,也让 Java 的未来发展方向更加清晰。JDK 23 再次证明,Java 的演进从来都不是一蹴而就的革命,而是一场兼顾当下实用、布局未来发展的长期深耕,每一步都贴合开发者的实际需求。

📢 拓展阅读

  • • JSR 398: Java SE 23 规范[1]
  • • OpenJDK JDK 23 官方页面[2]
  • • JEP 474: Generational ZGC[3]
  • • JEP 471: Deprecate Unsafe Memory Access Methods[4]
  • • JEP 455: Primitive Types in Patterns (Preview)[5]
引用链接

[1] JSR 398: Java SE 23 规范: https://www.jcp.org/en/jsr/detail?id=398 [2] OpenJDK JDK 23 官方页面: https://openjdk.org/projects/jdk/23/ [3] JEP 474: Generational ZGC: https://openjdk.org/jeps/474 [4] JEP 471: Deprecate Unsafe Memory Access Methods: https://openjdk.org/jeps/471 [5] JEP 455: Primitive Types in Patterns (Preview): https://openjdk.org/jeps/455

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevLlama 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java 23 发布:ZGC 默认分代,模式匹配支持基本类型
  • JDK 23 官方特性总览
    • 1. ZGC 分代模式默认启用(JEP 474)
    • 2. 准备移除 sun.misc.Unsafe 的内存访问方法(JEP 471)
    • 3. 基本类型模式匹配(预览,JEP 455)
  • 🧩 为何要关注 JDK 23?
  • 🧱 其他关键更新
  • ✅ 总结
  • 📢 拓展阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档