コンパクトオブジェクトヘッダー
オブジェクトヘッダーのサイズを半減させてメモリ密度とキャッシュ効率を向上させる。
コード比較
✕ 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サポート
コンパクトオブジェクトヘッダー
利用可能
JDK 25 LTS(JEP 519、2025年9月)で正式採用
仕組み
コンパクトオブジェクトヘッダーは64ビットプラットフォームでのオブジェクトあたりのオーバーヘッドを128ビットから64ビットに削減します。これにより特に小さなオブジェクトが多いアプリケーションでメモリを節約し、キャッシュ使用率を向上させます。
関連ドキュメント