JEP 401 值对象预览版合并入 OpenJDK
JEP 401: Value Objects (Preview) merged to OpenJDK master

OpenJDK 社区迎来重大更新,JEP 401 值对象(Value Objects)预览版正式合并至 master 分支。此次变更由 MrSimms 主导,涉及超过 20 万行代码的修改,不仅实现了值对象的语言层面支持,还同步引入了 JEP 539 中关于 JVM 严格字段初始化的关键特性。由于值对象功能高度依赖严格的初始化机制,两项工作被整合在同一代码库中推进。此次合并标志着 Java 在提升性能、减少内存开销方面迈出了重要一步,开发者可期待更高效的不可变数据结构支持。
这个拉取请求实现了 JEP 401 值对象预览版的第一个版本,同时也包含了 JEP 539 中关于 JVM 严格字段初始化的实现。
HN 评论区
160- timmg
我也感到有些孤独:我主要热爱的是 Java 这门语言本身。
缺少值类型是阻碍某些类型性能的最大障碍。我真的很期待这门语言的这次演进。
- exabrial
我认为理解这一更新涵盖与未涵盖的内容非常重要。这仅仅是“Valhalla 计划的第一部分”。例如,可以参考这篇很好的总结:https://www.jvm-weekly.com/p/project-valhalla-explained-how-...
- mormegil
有趣的是,尽管这两门语言都在不断引入新特性,但 Java 似乎依然领先于 JavaScript:
- Java 早已拥有了 Date 的现代替代方案,而 JavaScript 最近标准化的 Temporal API 在 Safari 中仍未得到支持。
- Java 拥有 switch 表达式,而 JavaScript 尽管深受 Scheme 影响,却并没有。
- 现在 Java 即将引入值对象,而 JavaScript 对应的元组(tuples)和记录(records)提案已被撤回。[0]
JavaScript 并非 Java 的分支,但其许多基本语法仍与 Java 相似,因此我认为将它们进行比较是公平的。
- ludovicianul
Java 核心团队在推进语言向前发展的同时,还尽可能保持向后兼容,为此所投入的思考和努力,总是让我惊叹不已。
- kuhsaft
我老是记不住这部分设计的理由——为什么值语义要绑定在声明处,而不是使用处?
为什么必须由类作者将其声明为值类型?我知道 Brian 之前已经多次解释过这个问题,但我总是记不住其中的理由。