synchronized 轻量级锁原理学习

理解java 对象头

在JVM中,对象存活在堆中。对象包含2块数据。

对象
对象头
实例变量
padding(小8个字节,仅做补齐用)

而这个对象头包含3块数据。

对象头
mark word
class meta address 指向方法区 表示这具体什么类
array length 如果对象是数组,表示数组的长度

mark word 状态 。长度由操作系统位数32/64决定的
对象头的信息

1.Unlocked 未锁定
2. Biased偏向锁
3. Light-weight locked 轻量级锁
4. heavy-weight locked重量级锁

轻量级锁。

  1. 进入临界代码块,监视对象是不是无锁状态(锁位标志是不是01)。不是01,直接升级为重量级锁。
  2. 当前线程操作栈创建一个栈帧 锁记录(Lock record),复制对象Object的mark word的拷贝。 称做displaced mark word。
  3. 执行CAS操作 ,虚拟机尝试将对象Object的mark word 指向Lock record。owner 字段指向到 Object 的mark word,引用互相指向。 如果更新成功则执行step4,失败则执行step5.
  4. 此时线程拥有该对象的锁,并且Object mark word 锁标志位更新成00.表示对象处于轻量级锁定状态。
  5. 由于对象Object的mark word 已经被修改,抢锁失败。自旋一定次数之后,锁升级成重量级锁。

抢锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiguansheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值