synchronize锁优化

不管学什么东西,都要明白为什么

为什么需要锁优化?

因为java程序在挂起唤醒线程的时候需要从用户态切换到内核态,这是非常消耗资源的。


 1,自旋锁与自适应自旋

在JDK  1.6中引入了自适应的自旋锁。自适应意味着自旋的时间不再固定了,而是由前
一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。如果在同一个锁对象上,自旋等
待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机就会认为这次自旋也很有
可能再次成功,进而它将允许自旋等待持续相对更长的时间,比如100个循环。另外,如果
对于某个锁,自旋很少成功获得过,那在以后要获取这个锁时将可能省略掉自旋过程,以避
免浪费处理器资源。有了自适应自旋,随着程序运行和性能监控信息的不断完善,虚拟机对
程序锁的状况预测就会越来越准确,虚拟机就会变得越来越“聪明”了。

2,锁消除

锁消除是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能
存在共享数据竞争的锁进行消除。锁消除的主要判定依据来源于逃逸分析的数据支持(第11
章已经讲解过逃逸分析技术),如果判断在一段代码中,堆上的所有数据都不会逃逸出去从
而被其他线程访问到,那就可以把它们当做栈上数据对待,认为它们是线程私有的,同步加
锁自然就无须进行。

3,锁粗化

把多个小锁改成一个大锁

4,轻量级锁

采用自旋来获取锁,比较占用cpu资源但是不会挂起

5,偏向锁

偏向某个线程,记录一个线程id,这个线程在获取这个锁的时候不需要获取或者释放锁

6,重量级锁

轻量级锁膨胀后成为重量级锁,在获取锁的时候直接挂起,不自旋







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值