Tooling 上級

オブジェクトヘッダーのサイズを半減させてメモリ密度とキャッシュ効率を向上させる。

✕ 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%小さいヘッダー

オブジェクトあたり16バイトではなく8バイトになります。

キャッシュ効率の向上

CPUキャッシュラインにより多くのオブジェクトが入ります。

📊

高密度

同じヒープサイズにより多くのオブジェクトを格納できます。

旧来のアプローチ
128ビットヘッダー
モダンなアプローチ
64ビットヘッダー
JDKバージョン
25
難易度
上級
コンパクトオブジェクトヘッダー
利用可能

JDK 25 LTS(JEP 519、2025年9月)で正式採用

コンパクトオブジェクトヘッダーは64ビットプラットフォームでのオブジェクトあたりのオーバーヘッドを128ビットから64ビットに削減します。これにより特に小さなオブジェクトが多いアプリケーションでメモリを節約し、キャッシュ使用率を向上させます。

共有 𝕏 🦋 in