java对象头


在hotspot虚拟机中,对象在内存的分布分为3个部分,对象头,实例数据,和对齐填充。本文主要讲解对象头。


hotspot虚拟机的对象头主要分为2个部分。


第一部分


 主要存储对象自身的运行数据比如:哈希码、GC分代年龄、锁状态标志、线程持久的锁、偏向线程的ID、偏向时间戳等。

这部分数据的长度在32位和64为虚拟机上分别对象32bit和64bit。官方称之为“mark word” 。mark word 被设计为非固定的数据结构,以便在及小的空间内

存储更多的信息。比如:在32位的hotspot虚拟机中:如果对象处于未被锁定的情况下。mark  word 的32bit空间中有25bit存储对象的哈希码、4bit存储对象的

分代年龄、2bit存储锁的标记位、1bit固定为0。

而在其他的状态下(轻量级锁、重量级锁、GC标记、可偏向)下对象的存储结构为

bbbb


第二部分

对象头的另外一部分是对象类型,即对象指向它类元数据的指针。虚拟机通过这个指针来确定对象时那个磊的实例(并不是所有的虚拟机都在对象头中包含了对象的类型指针)。如果对象时一个数组。那么在对象头中还会有一块用于记录数组长度的数据。因为虚拟机可以通过普通java对象的元数据确定java对象的大小。但是从数组的元数据中无法确认数组的大小。








  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值