Java对象头

一、对象的内存布局

  HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:

  1. 对象头(Header)->3字宽
    • Mark Word :存储对象的hashcode或锁信息(1字宽)
    • Class Metadata Address:类型指针(1字宽):
      即是对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。
    • Array Length:数组长度(1字宽):如果当前对象是数组
  2. 实例数据(Instance Data)
    对象真正存储的有效信息

  3. 对齐填充(Padding)
    JVM要求对象的大小必须是8字节的整数倍,对象头已经满足,则当对象的实例数据部分没有对齐时,需要对齐填充来补全。

Synchronized用的锁是存在java对象头里面的。
如果对象是数组结构,则虚拟机用3个字宽存储对象头。
如果对象是非数组结构,则虚拟机用2个字宽存储对象头。
32位虚拟机中,1字宽=4字节=32bit

32位JVM的Mark Word默认存储结构如下:(32bit)
这里写图片描述
在运行期间,Mark Word里存储的数据会随着锁标志位的变化而变化,可能会变化为以上4种数据。

https://blog.csdn.net/zhoufanyang_china/article/details/54601311

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值