做实验验证JDK8偏向锁:未启动、匿名偏向、偏向锁失效

理论知识

看了一篇博客(https://blog.csdn.net/weixin_45007916/article/details/107535746),其中有以下的图片:
偏向锁未启动时,markword的最后3个bit是001
匿名偏向时,markword的最后3个bit是101
jdk8默认的偏向锁启动延迟是4s(BiasedLockingStartupDelay=4000)

PS C:\Java_Study\wsc_shell> java -XX:+PrintFlagsFinal -version|findstr /i bias
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
     intx BiasedLockingBulkRebiasThreshold          = 20                                  {product}
     intx BiasedLockingBulkRevokeThreshold          = 40                                  {product}
     intx BiasedLockingDecayTime                    = 25000                               {product}
     intx BiasedLockingStartupDelay                 = 4000                                {product}
     bool TraceBiasedLocking                        = false                               {product}
     bool UseBiasedLocking                          = true                                {product}
     bool UseOptoBiasInlining                       = true                                {C2 product}

在这里插入图片描述
在这里插入图片描述

实验环境

windows10 x64
C:\Program Files\Java\jdk1.8.0_221\bin\java.exe

偏向锁未启动

对象头的最后1个byte是00000001,最后3个bit是001,
在这里插入图片描述

匿名偏向

延迟4100ms让偏向锁启动之后,再打印对象obj的信息内存结构信息
对象头的最后1个byte是00000101,最后3个bit是101,但是对象头中并未看到指向当前线程的指针
在这里插入图片描述

偏向锁中当前线程指针不为空

此时的偏向锁指向当前线程的数据(对象头低54个bit)为,00000000 00000000 00000000 00000000 00000011 01010110 011010
Epoch为00
hex(int(‘000000000000000000000000000000000000001101010110011010’, 2))
0xd59a
0xd59a这个和当前线程怎么联系起来?
在这里插入图片描述

计算对象的hashcode会使得偏向锁失效-匿名偏向到无锁

对象头的最后1个byte是00111000,最后3个bit是001,
从对象头的第26个bit开始的31bit是hashcode值,即
0011110 11110111 11111110 10001110

计算 int(‘0011110111101111111111010001110’, 2)
519569038
和输出的obj.hashCode()一致
在这里插入图片描述

计算对象的hashcode会使得偏向锁失效-升级为轻量级锁

对象头的最后1个byte是01011000,最后3个bit是000,
对象头的前62个bit是00000011 00110000 11110110 010110
hex(int(‘000000110011000011110110010110’, 2))
‘0xcc3d96’
0xcc3d96和当前线程栈中的Lock Record怎么联系起来?

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值