Folia
← 返回头版

JDK 28集成值类预览特性,探讨编译器配合的必要性

JDK 28 已将 JEP 401 作为预览特性集成,这是 Valhalla 项目的重要里程碑 1。值类(value classes)通过放弃对象身份,为 JVM 提供了更多优化自由 1。此外,JEP 539(JVM 中的严格字段初始化)允许 JVM 依赖 final 字段在封闭对象可观察之前已被初始化 1。

然而,在泛型类型擦除导致的多态调用等场景下,值类仍需编译器配合才能避免性能退化 1。文章通过三个示例展示了当前 JVM 对值类的优化能力及局限 1。例如,FourLongs 包含 32 字节有效载荷,对于当前 JVM 中的原子扁平化更新来说过大;且在 megamorphic 调用场景下,每次 reproduce 调用会分配 192 字节 1。针对这一局限,解决方案是在 Frobber 接口中显式重新声明类型化方法,从而将分配减少到零 1。编译和运行示例需使用 --enable-preview 和 --release 28 选项 1。


评论