Mark Word

在java的对象头中,mark word主要用于表示对象当前的状态。


而Mark Word是一个复用的数据结构。在不同的对象状态下,其存储的数据也不尽相同。


标志位为,

01:表示对象没有被锁定。bitfields中分别存放了对象的identify hash code,分段年龄,偏向锁标志。identify hash code是由System.identityHashCode()获取,它是一个随机的字符串,与对象的内容无关。这个值在对象的生命周期内是不可变的,因此这个值必须被缓存,因为在对象的状态改变的时候,对应的hash值会被覆盖,回复到unlocked的时候,需要将缓存值重新写入。

00:轻量锁标志。bitfields存放了指向lock record的地址,也就是指针。

10:锁膨胀标志(也就是重量锁的时候)。bitfields存放了指向monitor的指针。如果线程B试图获取线程A已经获得到的锁的时候,对象的状态会变成10。

11:gc标志。这个标志只在GC的时候使用,用于表示哪个对象还是可以达到的,也就是不用清除。

01::偏向锁标志。bitfields分别存放了线程ID,epoch,分段年龄,偏向锁标志。

上面提到的分段年龄是指:新建对象的分段年龄为0,之后每次在新生代拷贝一次就年龄+1,当年龄超过一个阈值之后,就会被丢入老年代。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值