【Java并发编程之深入理解】对象锁

版权声明:本文为博主原创文章,未经博主允许不得转载。 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并发编程的艺术

猜你喜欢

转载自blog.csdn.net/zjy15203167987/article/details/82556465