Java基础、中级、高级、架构面试资料

Valhalla 落地 JDK 28,涉及 197000+ 行改动

JAVA herman 10浏览
公告:“业余草”微信公众号 AI 中转站提供免费体验,点击链接 https://unity2.ai/register?ref=3XTnndN2 进行访问,支持 Claude、ChatGPT、Gemini 等最新模型!关注业余草微信公众号,添加作者微信:xttblog2!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

就在昨天,JDK 27 和 JDK 28 双双做了更新。其中,JDK 27 将在两天后的 2026-07-16 这天处于 Rampdown Phase Two (第二阶段收尾)状态。而 JDK 28 当前也有了早期改动,这其中,最大的看点就是备受瞩目的 Project Valhalla(JEP 401) 预览版。

虽然,JDK 28 还处在早期开发阶段,但是 Valhalla 预览版正在落地中,而 Java 内存模型也迎来 30 年来最大的变革。

根据 JDK 28 的进度可知,JDK 28 的早期访问构建(Early-Access Build)已经悄然推进到了 Build 5。虽然距离 2027 年 3 月的正式发布还有大半年时间,但这其中一个酝酿了 12 年的“核弹级”特性,Project Valhalla(JEP 401) 已经确认将以预览版形式登陆 JDK 28。

接下来,我们一起来预览一下 JDK 28 当前的改动,并深度解读 Valhalla 将如何改变我们写 Java 的方式。

文章配图参见我的公众号:https://mp.weixin.qq.com/s/i_Eny0-fZOfVfqXCxvWVXg

JDK 28 Build 5 早期版本

根据 JDK 28 官方发布说明https://jdk.java.net/28/release-notes(最后更新于 2026-07-13),目前 JDK 28 仍处于非常早期的开发阶段。JSR 403(Java SE 28)专家组已于 2026 年 6 月初正式成立,成员包括来自 Azul、Oracle、Eclipse 基金会和 SAP 的四位专家,由 Oracle 的 Iris Clark 担任规范负责人。

截至目前,JDK 28 的 Early-Access Build 已经迭代至 Build 5,但当前发布说明中记录的改动还相对“低调”,主要是安全证书更新、TLS 握手事件增强和文本格式化修复等基础设施层面的调整。

Build 5 已确认的改动如下所示。

改动项说明
LuxTrust Global Root CA 移除cacerts 密钥库中移除了过期的 LuxTrust 根证书
TLS 握手事件增强JFR 的 jdk.TLSHandshakeEvent 事件新增 namedGroup 字段,记录 TLS 握手协商的命名组
ListFormat 单引号处理修复java.text.ListFormat 不再受 MessageFormat 单引号转义语义影响
ListFormat 自定义模式严格校验对自定义列表格式模式的占位符校验更加严格

这些改动看似平常,但正如 Java 语言架构师 Brian Goetz 所言,伟大的平台演进,往往始于静默的基础设施打磨

Project Valhalla 终于来了!

如果说 JDK 28 有什么值得所有 Java 开发者屏息期待的特性,那无疑是Project Valhalla(JEP 401:Value Classes and Objects)

2026 年 6 月 15 日,Oracle 工程师 Lois Foltan 确认,JEP 401 将合入 OpenJDK 主干,目标版本正是 JDK 28。这是一次“极其庞大的变更”,拉取请求横跨 1816 个文件,新增 197000+ 行代码

Valhalla 要解决什么问题?

要知道,Java 自诞生以来就有一个根本性的不对称:

  • 基本类型(intdouble 等)按值存储——快速、紧凑、无对象开销
  • 其他一切都是引用类型——堆上分配、指针寻址、对象头开销

这意味着,即便是一个简单的 LocalDateInteger,也承载着完整的对象身份(Identity)开销。Brian Goetz 将 Valhalla 的目标概括为一句话,看起来像类,工作起来像 int

Value Class(值类)

JEP 401 引入了值类(Value Class),一种没有对象身份标识、仅由其字段值区分的类实例。

// JDK 28 预览版语法
value class Point {
    int x;
    int y;

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

// 更简洁的写法:value record
value record Point(int x, int y) {}

它具备以下关键特性。

  • 无身份(Identity-Free):没有内存地址,== 比较的是字段值而非引用
  • JVM 可扁平化(Flattening):数组中的值类对象可以内联存储,消除指针间接寻址
  • 可为 null:JDK 28 的值类仍是引用类型,允许 null(非空限制是后续 JEP 的目标)

内存减少高达 60%

由 Valhalla 带来的性能提升是实实在在的。

  • 标量化(Scalarization):JIT 编译器可将值对象拆分为字段直接传递,无需堆分配
  • 堆扁平化(Heap Flattening):值类数组存储为连续内存块,而非分散的指针引用
  • 缓存友好:连续内存布局大幅减少 CPU 缓存未命中

在金融计算、机器学习、游戏引擎和数据库驱动等场景中,研究人员报告称内存使用可减少高达 60%

破坏性变更

Valhalla 引入了刻意的破坏性变更,这是 Java 历史上罕见的“主动破窗”。

// 以下代码在 JDK 28 中将抛出异常
synchronized (Integer.valueOf(42)) {
    // Integer 将迁移为 value class,无法作为锁对象
}

上面的这些代码将编译失败,带来了迁移影响。

  • IntegerLong 等包装类将逐步迁移为 value class
  • synchronized(someInteger) 将编译失败或抛出异常
  • 依赖对象身份(== 比较引用地址)的代码需要重构

也就是说,在 JDK 28 之后的版本中,如果你的代码中对包装类型使用 synchronized 或依赖 == 进行身份比较的逻辑将会迎来编译失败的风险。

JDK 28 的其他预期方向

除了 Valhalla,JDK 28 的技术图谱还在展开中。根据专家组的讨论和社区共识,以下方向值得关注。

首先是,虚拟线程(Virtual Threads)的生产就绪深化。

  • 监控和可观测性增强
  • 调试工具链对协程生命周期的完整覆盖
  • 与容器运行时的调度协同优化

其次是,垃圾回收的持续进化。

  • ZGC 和 Shenandoah 的低延迟主线延续
  • 跨代际引用处理的进一步优化

然后是模块系统与云原生。

  • 提升 jlink 定制镜像在 Kubernetes Init Container 中的启动确定性
  • 强化 JPMS 与云原生部署场景的咬合度

最后,语言特性的渐进式完善。

  • 模式匹配向 switch 表达式的外部类结构解构支持
  • 记录类(Records)更灵活的构造约束机制
  • 密封接口(Sealed Interface)的语法补全

Valhalla 只是第一步

尽管 Valhalla 登陆 JDK 28 令人振奋,但 Brian Goetz 也坦诚地表示,希望它在 JDK 29 退出预览版?但这看起来 …… 过于乐观,非常的不现实。

JDK 28 中 Valhalla 并非完整版,它有的局限性。

  • 非空值类型(Null-Restricted Types)不在此版本中
  • 泛型特化(List<int>)仍是未来目标
  • 128 位值编码尚未支持
  • ArrayList<Point> 仍会在堆上分配(类型擦除限制)

官方给出的时间线如下。

  • JDK 28(2027 年 3 月):Valhalla 预览版(需 --enable-preview
  • JDK 29(2027 年 9 月):Valhalla 可能仍在预览
  • 下一个 LTS(预计 JDK 29 或 30):Valhalla 有望正式版落地

结语

JDK 27 的收尾与 JDK 28 的启程,标志着 Java 平台正在经历一次“静默的语法归位”。Valhalla 不是颠覆,而是让 Java 已有的能力更可信、更易读、更难误用。正如 Goetz 所说,这 12 年不是“写代码”的 12 年,而是“拒绝想法”的 12 年,直到剩下那个真正可维护的方案。

对于 Java 开发者而言,JDK 28 的 Valhalla 预览版是一个信号,Java 依然在为下一个 30 年做准备

Java 程序员们其实早就等不及了,Valhalla 真的是延期了又延期。终于在 JDK 28 中等来了一个好消息。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » Valhalla 落地 JDK 28,涉及 197000+ 行改动