在Java中,synchronized是用于实现线程同步的关键字,其底层实现原理涉及对象头、监督器锁(Monitor)以及锁升级机制。以下是详细剖析:
<hr> 1. 对象头与Mark Word
每个Java对象在内存中由三部分组成:
- 对象头(Header) :存储对象的元数据,包罗锁状态、GC分代年龄等。
- 实例数据(Instance Data) :对象的成员变量。
- 对齐填充(Padding) :确保对象内存对齐。
Mark Word是对象头的一部分,记载了对象的锁状态、哈希码、分代年龄等信息。在32位JVM中,Mark Word占4字节;64位JVM中占8字节。不同锁状态下,Mark Word的内容会动态变化:
锁状态 存储内容 无锁 哈希码、分代年龄、是否方向锁(0) 方向锁 线程ID、Epoch、分代年龄、方向标记(1) 轻量级锁 指向栈中锁记载的指针(Lock Record) 重量级锁
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |