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