synchronized的锁消除以及锁粗化

前言:
我们今天说一下synchronized的锁粗化和锁消除,那么肯定大家好奇了,什么是锁粗化,什么是锁消除呢?

锁消除-->:是指虚拟机即时编译器在运行时,对一些代码要求同步,但是被检测到不

可能存在共享数据竞争的锁进行消除。比方说:堆中的所有数据都不会逃逸出去从而被

其它线程访问到,那就可以把他们当作栈上数据对待,因为栈上数据是线程私有的,

在进行同步加锁时就无需加锁。JIT编译器编译时,对运行上下文进行扫描,去除不可

能存在竞争的锁。

在这里插入图片描述
就比方说上述代码,StringBuffer类本身就是线程安全的,并且大多数方法是
synchronized修饰的,当我们对它进行追加字符时,因为加锁相同,所以说
在jvm中就自动进行了锁消除。

那什么是锁粗化呢?

	通过加大锁的范围,避免重复的加锁和解锁:
	
	例如:编写代码的时候,同步代码块锁的范围要尽量的小,若存在在竞争锁,等
    锁的线程也能尽快拿到锁。但是如果一系列的连续操作反复对对象进行加锁和解
    锁操作,甚至加锁操作出现在循环体中,即时没有线程竞争,频繁的进行互斥同
    步操作,也会导致性能损耗:下面的代码就进行了锁粗化,

在这里插入图片描述
就是如果虚拟机检测到一串串的操作反复的对同一个对象加锁解锁,将会
把整个操作范围扩展到整个操作序列,比方说上面的代码:就是扩展到append操作的外部,把while循环加锁,这样只需加锁一次就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值