Java中重写Hash Function相关图示的16'0与16'1指代含义问询

标记含义说明
这是HotSpot虚拟机Java对象头(Mark Word)的状态标记,两个标记的具体含义如下:
- 前缀的16指对象分代年龄的临界阈值:HotSpot中对象的分代年龄占用4个bit位,最大可存储的年龄值为15,16就是对象年龄达到晋升老年代的上限阈值
- 后缀的0和1是默认哈希值计算状态的标识位:
16'0:该对象还未调用过默认hashCode()方法或System.identityHashCode(),还没有生成基于对象地址的唯一identity哈希值16'1:该对象已经生成过基于对象地址的identity哈希值,对应数值已经写入对象头的预留存储位置
补充说明:一旦对象生成了基于地址的identity哈希值,就无法再进入偏向锁状态,这也是偏向锁模式下调用默认hashCode()会直接触发偏向锁撤销的核心原因。
内容的提问来源于stack exchange,提问作者mohamed hesen
相关产品推荐
相关产品推荐

