提高“锁”性能

1.减少锁持有时间

2.减小锁的粒度 (尽可能的细化业务代码,业务方法,在需要加锁的方法上进行加锁)

3.锁分离(读写锁) 参考LinkedBlockingQueue take(),put() 

4.锁粗化(和减少锁持有时间相反,主要针对很快能执行完成的操作)

 

 

锁优化

  偏向锁:一个线程获得了锁,那么锁就进入偏向模式。当这个线程再次请求锁时,无须在做任何同步操作,节省了锁申请的操作。(几乎没有锁竞争场合,偏向锁有比较好的优化 java虚拟机参数 -XX:+UseBiasedLocking 开启偏向锁)。

  轻量级锁:如果偏向锁失败,虚拟机不会立即挂起线程。对象头部作为指针,指向持有锁的线程堆栈的内部判断一个线程是否持有对象锁。如果获取不到就会膨胀为重量级锁。

  自旋锁:轻量级锁获取失败后,虚拟机会让当前线程做几个空循环(自旋),经过若干次循环后,可以得到锁,就顺利进入临界区,如果得不到就线程挂起。

  锁消除:去除不可能存在共享资源竞争的锁。如下:

Vector 为createStrings函数的局部变量,不存在被其他线程访问。(锁消除涉及逃逸分析,观察变量是否逃出某一个作用域 -server 模式下进行 逃逸分析 -XX:+DoEscapeAnalysis打开逃逸分析;-XX:+EliminateLocks 打开锁消除)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值