对象头(Object Header)中的 Mark Word 在32位和64位系统中有显著区别

对象头(Object Header)中的 Mark Word 在32位和64位系统中有显著区别,尤其是在开启或未开启指针压缩(Compressed Oops)时。以下是详细说明:


1. 32位系统与64位系统的Mark Word区别

32位系统
  • Mark Word 大小:32位(4字节)

  • 结构

    • 存储对象的哈希码、锁状态、GC分代年龄等信息。

    • 锁状态(如偏向锁、轻量级锁、重量级锁)会占用部分位。

64位系统
  • Mark Word 大小:64位(8字节)

  • 结构

    • 与32位类似,但可存储更多的信息。

    • 由于指针长度增加(64位),对象头的大小会显著增大,导致内存开销增加。


2. 开启指针压缩(Compressed Oops)与未开启的区别

指针压缩是JVM在64位系统下的一种优化技术,目的是减少内存占用。

未开启指针压缩
  • 指针大小:64位(8字节)

  • 对象头大小

    • Mark Word:8字节

    • 类型指针(Klass Pointer):8字节

    • 总计:16字节(不包括对齐填充)

  • 特点

    • 内存占用较大,尤其是小对象(如只有几个字段的对象)会显得浪费。
开启指针压缩
  • 指针大小:32位(4字节)

  • 对象头大小

    • Mark Word:8字节

    • 类型指针(Klass Pointer):4字节

    • 总计:12字节(不包括对齐填充)

  • 特点

    • 类型指针被压缩为32位,减少了内存占用。

    • 压缩后的指针可以表示最大35位的地址空间(32GB堆内存),通过左移3位(乘以8)还原为64位地址。

    • 显著减少小对象的内存开销。


3. 指针压缩的适用条件

  • 堆内存限制:通常堆内存小于32GB时,指针压缩才能生效。

  • 对齐要求:JVM要求对象在内存中按8字节对齐,因此即使开启指针压缩,对象头大小仍可能对齐到16字节。


4. 总结

特性 32位系统 64位系统(未压缩) 64位系统(压缩)
Mark Word 大小 4字节 8字节 8字节
类型指针大小 4字节 8字节 4字节
对象头大小(最小) 8字节 16字节 12字节
内存占用 较小 较大 较小
适用场景 小内存应用 大内存应用 堆内存 < 32GB
  • 32位系统:对象头较小,但受限于地址空间(最大4GB堆内存)。

  • 64位系统(未压缩):对象头较大,适合大内存应用。

  • 64位系统(压缩):通过压缩类型指针,减少内存占用,适合堆内存小于32GB的场景。

在实际开发中,建议在64位系统上开启指针压缩(默认开启),以减少内存开销并提升性能。

相关推荐
子非衣1 小时前
Java使用Aspose进行Word转PDF时异常卡主问题
java·pdf·word
E_ICEBLUE1 小时前
将 Excel 表格插入 Word 文档的三种实用方案(Python 自动化)
python·word·excel
俊哥工具2 小时前
027免费开源硬盘检测工具,一键查看健康度,杜绝数据丢失
pdf·电脑·word·excel·音视频
DS随心转插件15 小时前
AI 导出鸭实测:Markdown TO Word 本地化转换能力深度评测,多角度拆解本地化转换真实表现
人工智能·ai·word·wps·deepseek·ai导出鸭
DS随心转插件16 小时前
AI 导出鸭实操教程:Markdown 转 Word 高效协作与隐私交付实战指南
人工智能·ai·word·豆包·deepseek·ai导出鸭
AI导出鸭PC端20 小时前
ChatGPT怎么生成word文档?「AI 导出鸭」解决格式丢失痛点
人工智能·ai·chatgpt·word·豆包·ai导出鸭
SunnyDays101121 小时前
Java 操作 Word 超链接:添加网页、邮箱、文件和图片链接
java·word·超链接
SunnyDays10111 天前
Python 操作 Word 文档目录详解:创建、更新、提取与删除
python·word·目录
DS随心转插件1 天前
实测 AI 导出鸭!Markdown 转 Word 工具效果实测与质量解析
人工智能·ai·word·deepseek·ai导出鸭
知南x1 天前
【DPDK例程学习】(1) helloworld
学习·word