本博客日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 自诞生以来就有一个根本性的不对称:
- 基本类型(
int、double等)按值存储——快速、紧凑、无对象开销 - 其他一切都是引用类型——堆上分配、指针寻址、对象头开销
这意味着,即便是一个简单的 LocalDate 或 Integer,也承载着完整的对象身份(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,无法作为锁对象
}
上面的这些代码将编译失败,带来了迁移影响。
Integer、Long等包装类将逐步迁移为 value classsynchronized(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+ 行改动