在启用指针压缩后,64位机器上JVM ObjectHeader如何影响内存布局?
- 内容介绍
- 相关推荐
本文共计1406个文字,预计阅读时间需要6分钟。
直接使用 `ClassLayout.parseInstance()` 打印对象布局是获取对象布局最可靠的方式,它不依赖于你记住的内存布局理论值,而是直接读取 JVM 的实际分配结果。关键前缀是必须引入 `jol-core` 依赖,并确保运行在 64 位 JVM 上(可通过 `java -version` 查看输出是否包含 `64-Bit`)。
常见错误现象:输出显示对象头为 16 字节(OFFSET 0–15),但误以为是 128 bit → 其实是 16 字节 × 8 = 128 bit,而启用压缩后对象头应为 12 字节(Mark Word 8 + Klass Pointer 4),加上对齐填充才凑成 16 字节总大小。别把「打印出的 OFFSET 范围」和「对象头真实长度」混为一谈。
本文共计1406个文字,预计阅读时间需要6分钟。
直接使用 `ClassLayout.parseInstance()` 打印对象布局是获取对象布局最可靠的方式,它不依赖于你记住的内存布局理论值,而是直接读取 JVM 的实际分配结果。关键前缀是必须引入 `jol-core` 依赖,并确保运行在 64 位 JVM 上(可通过 `java -version` 查看输出是否包含 `64-Bit`)。
常见错误现象:输出显示对象头为 16 字节(OFFSET 0–15),但误以为是 128 bit → 其实是 16 字节 × 8 = 128 bit,而启用压缩后对象头应为 12 字节(Mark Word 8 + Klass Pointer 4),加上对齐填充才凑成 16 字节总大小。别把「打印出的 OFFSET 范围」和「对象头真实长度」混为一谈。

