偏向锁撤销的场景和哈希码存储
需要注意下,当调用锁对象的Object#hash或System.identityHashCode()方法会导致该对象的偏向锁或轻量级锁升级。这是因为在Java中一个对象的hashcode是在调用这两个方法时才生成的,如果是无锁状态则存放在mark word中,如果是重量级锁则存放在对应的monitor中,而偏向锁是没有地方能存放该信息的,所以必须升级。具体可以看这篇文章的hashcode()方法对偏向锁的影响小节
1、在偏向锁状态内部,进行hash计算 撤销偏向锁,并直接升级到重量级锁
2、偏向锁状态执行notify 升级为轻量级锁
3、在偏向锁状态外,进行hash计算 撤销偏向锁,并直接升级到轻量级锁
https://blog.csdn.net/u011433316/article/details/109158233
https://www.jianshu.com/p/4758852cbff4
https://blog.csdn.net/zh921112/article/details/34807145