重量级锁-Monitor

Java对象头组成

  • 64位JVM的普通对象头(Object Header)

在这里插入图片描述

一个对象头由mark word(64位)和klass word组成,数组长度是可选项

  • 64位mark word结构
    在这里插入图片描述

如果该对象加锁,markword就会由原来的01(无锁)标志位变成10(重量级锁),前面的hashcode,age,biased_lock由pty_to_heavyweight_monitor替代(也就是monitor地址)


实例代码

  • 相关测试依赖
<!-- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core -->
<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.9</version>
</dependency>
public class Test01 {

    public static void main(String[] args) {
        Object object = new Object();
        // 当前没有线程竞争,也就是无锁态,后三位标志位为001
        System.out.println(ClassLayout.parseInstance(object).toPrintable());
    }

}

在这里插入图片描述

  • 对象头(object header)一共有12个字节,其中前8个字节是Mark Word,也就是64位组成
0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)

Mark Word最后3位是001(由于是小端存储,也就是低位字节放高位存储)
在这里插入图片描述

  • 还有4个字节是Klass Word,也就是4个字节,32位
8     4        (object header)                           e5 01 00 20 (11100101 00000001 00000000 00100000) (536871397)

重量级锁工作原理

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值