7.对象的内存信息

对象占据的内存区域大体可以分为三块,对象头,实例数据,和对齐填充
hotspot里面的对象头包含两部分信息,第一是存储对象自身的运行时数据,如HashCode,GC分代,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳等,这部分数据被称为markword,在32和64位虚拟机中分别占据32bit和64bit的内存,为了能在这么小的空间内存储足够的信息,实际上虚拟机会采用非固定的数据结构存储这些信息,比如32位的虚拟机中,在对象未被锁定的状态下,25bit用于存储hash码,4bit存储对象分代年龄,2bit存储锁标志位,1bit固定为0(表示偏向锁状态),
GC分代年龄由4bit存储,也就是0000-1111的范围,所以分代年龄最大为15
锁标志位有
00,01,10,11
存储内容	标志位	状态对象哈希码、对象分代年龄	01	未锁定指向锁记录的指针	00	轻量级锁定指向重量级锁的指针	10	膨胀(重量级锁定)空,不需要记录信息	11	GC标记偏向线程ID、偏向时间戳、对象分代年龄	01	可偏向

对象头的另一部分是类型指针,即对象指向的所属的类元数据的指针,虚拟机通过该指针确定这个对象是哪个类的实例,这不是必须的,也有的实现不保留类型指针。另外,如果对象是一个java数组,那么对象头中还有一个区域用于记录数组长度,因为虚拟机可以通过java对象的元数据信息确定java对象的大小,但无法从数组的元数据确定数组的大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值