一个空 Object 对象的占多大空间?

文章解释了在HotSpot虚拟机中,对象内存布局如何受压缩指针影响,以及在开启或关闭压缩指针情况下Object占用的字节数。对象头包括Markword、类元指针和数组长度,内存需8字节对齐以处理伪共享问题。
摘要由CSDN通过智能技术生成

Object

在开启了压缩指针的情况下,Object 默认会占用 12 个字节,但是为了避免伪共享问题,JVM 会按照 8 个字节的倍数进行填充,所以会填充 4 个字节变成 16 个字节长度。
在关闭压缩指针的情况下,Object 默认会占用 16 个字节,16 个字节正好是 8 的整数倍,因此不需要填充

OOP

在 HotSpot 虚拟机里面,(如图)一个对象在堆内存里面的内存布局是使用 OOP 结构来表示的,
它主要分为三个部分:
  • (如图)对象头,包括 Markword、类元指针、数组长度其中 Markword 用来存储对象运行时的相关数据,比如 hashCode、gc 分代年龄等。在 64 位操作系统中占 8 个字节,32 位操作系统中占 4 个字节类元指针指向当前实例对象所属哪个类,开启指针压缩的情况下占 4 个字节,未开启则占 8 个字节数组长度只有对象数组才会存在,占 4 个字节
  • 实例数据,存储对象中的字段信息
  • 对齐填充,Java 对象的大小需要按照 8 个字节或者 8 个字节的倍数对齐,避免伪共享问题。

因此,一个空的对象,在开启压缩指针的情况下,占 16 个字节其中 Markword 占 8 个字节、类元指针占 4 个字节, 对齐填充占 4 个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值