调用synchronized默认会给锁对象加锁偏向锁,若有其他线程竞争会将锁升级为轻量级锁,若仍未竞争到锁,线程会自旋,循环操作尝试获取锁(自旋锁),自旋达到阈值后仍未获得锁将升级为重量级锁,未得到锁的线程被阻塞,由Monitor来管理
调用对象的hashCode方法会导致偏向锁失效,hashCode需要32位bit来存储,偏向锁对象头里自旋锁的大小和hashCode大小不能共存,会导致锁撤销。
多线程竞争会导致偏向锁撤销
调用synchronized默认会给锁对象加锁偏向锁,若有其他线程竞争会将锁升级为轻量级锁,若仍未竞争到锁,线程会自旋,循环操作尝试获取锁(自旋锁),自旋达到阈值后仍未获得锁将升级为重量级锁,未得到锁的线程被阻塞,由Monitor来管理
调用对象的hashCode方法会导致偏向锁失效,hashCode需要32位bit来存储,偏向锁对象头里自旋锁的大小和hashCode大小不能共存,会导致锁撤销。
多线程竞争会导致偏向锁撤销