Object.hashCode的计算过程
2022-05-02 14:52:33 0 举报
JDK java 源码剖析Object.hashCode的计算过程
作者其他创作
大纲/内容
是否使用偏向锁?
返回hashCode
获取监视器持有的对象头
获取Object.hashCode
响应中断版本
no不为空
撤销偏向锁在计算hashCode前
调用ObjectSynchronizer.FastHashCode()
yes为空
yes
判断监视器对象头的hashCode是否为空?
no
对象头设置hashCode
hobj()
yes成功
CAS将监视器持有的对象头更新为新的持有hashCode的对象头
还不能获取到hashCode值,直接膨胀为重量级锁
CAS操作成功了吗?
no操作失败
生成新的hashCode
操作失败,说明其他线程设置了hashCode返回该hashCode
获取监视器
yes,返回空值
开始
对象是否为空?
原始对象头部的hashCode是否为空?
结束
获取对象头部内的hash值
对象是否持有监视器?
对象头的hashCode是否为空?
是否为空
判断对象头是否处于无锁状态?
生成一个新的hashCode值
获取原始对象头部
是否为轻量级锁?
获取对象稳定的对象头部
是否持有对象的偏向锁?
获取对象头的hashCode
CAS将对象头更新为新的持有hashCode的对象头
0 条评论
回复 删除
下一页