代码对比
✕ Java 8
// Default: 128-bit object header // = 16 bytes overhead per object // A boolean field object = 32 bytes! // Mark word (64) + Klass pointer (64)
✓ Java 25
// -XX:+UseCompactObjectHeaders // 64-bit object header // = 8 bytes overhead per object // 50% less header memory // More objects fit in cache
发现此代码有问题? 告诉我们。
为什么现代方式更好
头部缩小 50%
每个对象 8 字节而非 16 字节。
更好的缓存
更小的对象意味着每个缓存行容纳更多对象。
零代码更改
无需修改应用程序代码。
旧方式
128 位头
现代方式
64 位头
自 JDK
25
难度
高级
JDK 支持
紧凑对象头
可用
在 JDK 25 LTS 中正式发布(JEP 519,2025 年 9 月)。
工作原理
紧凑对象头将每个对象的开销从 128 位(16 字节)减少到 64 位(8 字节)。这提高了内存密度,减少了 GC 压力,并提高了缓存局部性。
相关文档