HeadlinesBriefing favicon HeadlinesBriefing.com

JDK 28 值类预览功能优化详解

Hacker News •
×

本文讨论了 JDK 28 中的预览功能,特别是 JEP 401,这是一个作为预览功能集成的主要 Valhalla 里程碑。值类增强了传达程序语义和 JVM 可用优化机会的能力。然而,认为普通类提供性能基线而值类无法突破这一观点是没有根据的。一个善意的程序可能会迫使 JVM 在方法交互时在扁平化表示和引用表示之间转换,这可能会抵消优势。值类的主要优化优势在于放弃身份,允许运行时选择合适的表示,将值扁平化以避免指针追踪,并将组件标量化到寄存器或栈上。由于不再要求身份,逃逸分析变得微不足道。不可变性使扁平化成为可能;JEP 539(严格字段初始化)让 JVM 可以依赖 final 字段在其封闭对象变得可观察之前已被初始化。由于此类字段以后无法更新,JVM 可以使用非原子扁平布局,而无需担心撕裂赋值。可变字段必须保持无撕裂赋值。如果可变字段包含的值太大,无法进行原子扁平更新,JVM 必须使用引用布局。考虑一个包含 32 字节负载的 Four Longs 记录;太大,无法进行原子扁平更新。但在 Envelope 记录中,负载是一个严格初始化的 final 字段,允许非原子扁平布局。如果 Envelope 是可变的,布局会恢复为 REGULAR 以保持一致性。