JEP 519:紧凑对象头

原文:JEP 519- Compact Object Headers
作者:
日期:2025-10-28

负责人罗曼·肯克(Roman Kennke)
类型特性
范围实现
状态已完成 / 已交付
版本25
组件HotSpot / 运行时
讨论地址hotspot - dev@openjdk.org
工作量S
持续时间XS
相关内容JEP 450:紧凑对象头(实验性)
审核人科琳·菲利莫尔(Coleen Phillimore)、斯特凡·卡尔松(Stefan Karlsson)、弗拉基米尔·科兹洛夫(Vladimir Kozlov)
批准人弗拉基米尔·科兹洛夫(Vladimir Kozlov)
创建时间2025/04/15 14:01
更新时间2025/08/24 18:03
问题编号8354672

摘要

将紧凑对象头从实验性特性转变为产品特性。

非目标

本特性的目标并非使紧凑对象头成为默认的对象头布局。

动机

紧凑对象头在 JDK 24 中由 JEP 450 作为一种可选的对象头布局被引入。对于这种规模的特性,最好谨慎且逐步地引入,所以我们将其作为实验性特性推出。

自 JDK 24 以来,紧凑对象头已证明了其稳定性和性能。

在甲骨文公司,通过运行完整的 JDK 测试套件对其进行了测试。在亚马逊公司,也有数百个生产环境中的服务对其进行了测试,其中大多数是将该特性回移植到 JDK 21 和 JDK 17 后使用的。

多项实验表明启用紧凑对象头可提升性能:

现在是时候将紧凑对象头从实验性特性转变为产品特性了。

描述

在 JDK 24 中,通过以下命令行选项启用紧凑对象头:

$ java -XX:+UnlockExperimentalVMOptions -XX:+UseCompactObjectHeaders ...
  

一旦紧凑对象头成为产品特性,第一个选项 -XX:+UnlockExperimentalVMOptions 将不再需要。

测试

除了 上文 提到的测试外,紧凑对象头作为 JEP 450 的一部分已经过大量测试。无需进一步测试。

目前一些测试在启用紧凑对象头时会提供 -XX:+UnlockExperimentalVMOptions 命令行选项。由于这将不再需要,我们会相应调整这些测试。

风险与假设

JEP 450 中所讨论的,未来的特性可能需要额外的对象头位。我们已经为 瓦尔哈拉项目 预留了四位。如果出现对更多位的需求,我们可以使用已经在 小人国项目 中进行过原型设计的技术,进一步缩小压缩类指针和标识哈希码。