synchronized在Jdk1.6后的底层优化分析
作者:互联网
JDK1.6 对synchronized锁的实现引入了大量的优化来减少锁操作的开销,如: 偏向锁、轻量锁、自旋锁、适应性自旋锁、锁消除、锁粗化 等等技术。
讲synchronized之前,先说一些知识点。
锁的本质是可以理解为更新一个标识,就synchronized而言,这个标识是存在对象头中。
64位Hotspot虚拟机中,对象头定义为12个字节(byte),一个字节是8位(bit),也就是对象头一共96位。也就是说其中一些位数就是用来存储我们锁标识的。
synchronized锁主要存在五种状态
(1)无锁不可偏向
(2)无锁可偏向
(3)偏向锁
(4)轻量锁
(5)重量锁
锁会随着竞争的激烈而逐渐升级。且升级不可降级,即 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁是单向的。 这种策略是为了提高获得锁和释放锁的效率。
什么是无锁不可偏向?
无锁好理解,就是说这个对象没有被任何线程上锁。不可偏向的意思就是说这个对象不会偏向于某个线程(这句话涉及到偏向锁,看完后边回来就理解了)。
标签:无锁,synchronized,对象,Jdk1.6,标识,轻量,偏向,底层 来源: https://www.cnblogs.com/xinay/p/16652340.html