一、调用对象 hashCode
调用了对象的 hashCode,但偏向锁的对象 MarkWord 中存储的是线程 id,如果调用 hashCode 会导致偏向锁被撤销。
此时如果发生锁升级,会直接是轻量级锁
- 轻量级锁会在锁记录中记录 hashCode
- 重量级锁会在 Monitor 中记录 hashCode
- 而如果是偏向锁在markWord中记录了hashcode后,就没有位置再去记录线程id了,所以就直接由无锁升级为轻量级锁
二、其它线程使用对象
- 当有其它线程使用偏向锁对象时,会将偏向锁升级为轻量级锁
三、调用 wait/notify
会直接关联monitor对象,升级为重量级锁
