面试官:JVM对锁进行了优化,都优化了啥?

从JDK1.6开始,JVM对锁进行了各种优化,目的就是为了在线程间更高效的共享数据和解决互斥同步的问题。从锁优化的话题开始,可以引申出很多考点面试题,比如锁优化的技术、各优化技术的细节、CAS实现原理、CAS的ABA问题及如何解决等,持续发散还会引发更多问题,例如逃逸分析等,可以看出技术点都是相关联的,需要不断积累和梳理。

面试官:JVM实现了哪些锁优化技术?

小白:自旋锁、自适应自旋锁、锁粗化、锁消除、偏向锁、轻量级锁。

面试官:介绍一下自旋锁?为什么引入自旋锁?

小白:自旋锁就是在请求获取锁,又不能马上获取到时,让当前线程在不放弃处理器执行时间的情况下执行忙循环,尝试等待锁被释放,再获取锁。引入自旋锁是为了节省线程挂起和恢复的开销。

面试官:你刚刚说引入自旋锁节省了线程挂起和恢复的开销,但循环也是需要占用处理器时间的,那这个自旋的次数如何控制?

小白:默认是10次,也可以通过JVM参数-XX:PreBlockSpin配置,当然这些自旋都是固定的,所以引入了自适应自旋锁,自旋的次数由前一次在同一个锁上的自旋次数和锁的拥有者的状态来决定。如果前面线程成功获取锁并且正常运行,那么本次获取锁的可能性很大,所以自旋的次数相对多一些;如果前面线程很少成功获取锁,那么本次获取锁的概率也很小,就可能不执行自旋了。

面试官:锁粗化优化了什么?

小白:如果在一段代码中同一线程反复获取、释放同一个对象的锁,将会生产不必要的性能开销,所以需要把获锁的范围扩大,对同一个对象的锁操作只进行一次,在头部获取锁&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值