版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjy15203167987/article/details/82556465
Java的对象头通常由两个部分组成,一个是Mark Word存储对象的hashCode或者锁信息,另一个是Class Metadata Address用于存储对象类型数据的指针,如果对象是数组,还会有一个部分存储的是数据的长度。
java对象头的长度:
对象头里的Mark Word里默认存储对象的HashCode、分代年龄和锁标记位。
32位JVM的Mark Word的默认存储结构为:
在运行期间,Mark Word里存储的数据会随着锁标志位的变化而变化。Mark Word可能变化为存储以下4种数据:
64位JVM的Mark Word的默认存储结构为:
多个线程来访问对象时锁的状态变化: |
偏向锁初始化流程:
两个线程同时争夺锁,导致锁膨胀的流程图:
参考资料:Java并发编程的艺术