万字详解JVM,让你一文吃透(11)


程序员怎么会在明知道不存在数据竞争的情况下使用同步呢?很多不是程序员自己加入的 。
锁粗化原则上,同步块的作用范围要尽量小 。但是如果一系列的连续操作都对同一个对象反复加锁和解锁,甚至加锁操作在循环体内,频繁地进行互斥同步操作也会导致不必要的性能损耗 。
锁粗化就是增大锁的作用域 。
轻量级锁在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统互斥量产生的性能消耗 。
偏向锁消除数据在无竞争情况下的同步原语,进一步提高程序的运行性能 。即在无竞争的情况下,把整个同步都消除掉 。这个锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁没有被其他的线程获取,则持有偏向锁的线程将永远不需要同步 。

经验总结扩展阅读