synchronized锁的验证 [无锁-」偏向锁-」轻量级锁-」重量级锁-」无锁过程]

锁的验证- 无锁->偏向锁->轻量级锁->重量级锁->无锁过程

一、JVM 设置参数

# 开启偏向锁
-XX:+UseBiasedLocking
# 关闭偏向锁延迟
-XX:BiasedLockingStartupDelay=0
# 查看所有的 JVM 参数
-XX:+PrintFlagsFinal
# 设置重偏向阈值
-XX:BiasedLockingBulkRebiasThreshold=20
# 批量重偏向距离上次批量重偏向的后重置的延迟时间
-XX:BiasedLockingDecayTime=25000
# 设置批量撤销阈值
-XX:BiasedLockingBulkRevokeThreshold=40

在 JVM 启动的时候会有很多线程在后台运行,例如 GC 线程,Finalizer 线程,VM Thread 线程等,会用到很多同步操作,所以在启动的前 4 秒默认创建的对象都不支持偏向,因为有默认参数

	-XX:BiasedLockingStartupDelay=4000

二、无锁状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V4hwbHgh-1594019771902)(/Users/haocongcong/Library/Containers/com.tencent.WeWorkMac/Data/Library/Application Support/WXWork/Data/1688850015369412/Cache/Image/2020-06/无锁二进制.png)]

     public void test1(){
	     Object model2 = new Object();
        System.out.println(ClassLayout.parseInstance(model2).toPrintable());
        System.out.println("hash: -----" + model2.hashCode());
        // 偏向锁
        System.out.println(ClassLayout.parseInstance(model2).toPrintable());
        binaryToDecimal(model2.hashCode());   
     }
OFFSET  SIZE   TYPE DESCRIPTION            VALUE
      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)
      8     4        (object header)       e5 01 00 f8 (11100101 00000001 00000000 11111000) (-134217243)
     12     4        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

hash: -----1975358023
java.lang.Object object internals:
 OFFSET  SIZE   TYPE DESCRIPTION           VALUE
      0     4        (object header)       01 47 92 bd (00000001 01000111 10010010 10111101) (-1114487039)
      4     4        (object header)       75 00 00 00 (01110101 00000000 00000000 00000000) (117)
      8     4        (object header)       e5 01 00 f8 (11100101 00000001 00000000 11111000) (-134217243)
     12     4        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

header中前8个字节按照平时习惯的从高位到低位的展示为:

00000000 00000000 00000000 01110101 10111101 10010010 01000111 00000001

对照上图。最后3位001,代表无锁状态
中间31位(01110101 10111101 10010010 01000111)换算成10进制,即为上图打印的hash值:1975358023

偏向锁

    public static void main(String[] args) throws InterruptedException {
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值