JEP 401 值对象预览版合并入 OpenJDK

JEP 401: Value Objects (Preview) merged to OpenJDK master

JEP 401 值对象预览版合并入 OpenJDK

OpenJDK 社区迎来重大更新,JEP 401 值对象(Value Objects)预览版正式合并至 master 分支。此次变更由 MrSimms 主导,涉及超过 20 万行代码的修改,不仅实现了值对象的语言层面支持,还同步引入了 JEP 539 中关于 JVM 严格字段初始化的关键特性。由于值对象功能高度依赖严格的初始化机制,两项工作被整合在同一代码库中推进。此次合并标志着 Java 在提升性能、减少内存开销方面迈出了重要一步,开发者可期待更高效的不可变数据结构支持。

这个拉取请求实现了 JEP 401 值对象预览版的第一个版本,同时也包含了 JEP 539 中关于 JVM 严格字段初始化的实现。
  1. timmg

    我也感到有些孤独:我主要热爱的是 Java 这门语言本身。

    缺少值类型是阻碍某些类型性能的最大障碍。我真的很期待这门语言的这次演进。

  2. exabrial

    我认为理解这一更新涵盖与未涵盖的内容非常重要。这仅仅是“Valhalla 计划的第一部分”。例如,可以参考这篇很好的总结:https://www.jvm-weekly.com/p/project-valhalla-explained-how-...

  3. mormegil

    有趣的是,尽管这两门语言都在不断引入新特性,但 Java 似乎依然领先于 JavaScript:

    - Java 早已拥有了 Date 的现代替代方案,而 JavaScript 最近标准化的 Temporal API 在 Safari 中仍未得到支持。

    - Java 拥有 switch 表达式,而 JavaScript 尽管深受 Scheme 影响,却并没有。

    - 现在 Java 即将引入值对象,而 JavaScript 对应的元组(tuples)和记录(records)提案已被撤回。[0]

    JavaScript 并非 Java 的分支,但其许多基本语法仍与 Java 相似,因此我认为将它们进行比较是公平的。

    [0]: https://github.com/tc39/proposal-record-tuple

  4. ludovicianul

    Java 核心团队在推进语言向前发展的同时,还尽可能保持向后兼容,为此所投入的思考和努力,总是让我惊叹不已。

  5. kuhsaft

    我老是记不住这部分设计的理由——为什么值语义要绑定在声明处,而不是使用处?

    为什么必须由类作者将其声明为值类型?我知道 Brian 之前已经多次解释过这个问题,但我总是记不住其中的理由。

同日更多故事

2026-07-31