一、首先要讲这几个锁,需要了解一个知识点:对象头
java对象在堆中的存储模型为:对象头、实例数据、对齐填充
对象头里面存储信息:分为两部分
第一部分为:对象自身的运行时的数据。
第二部分为:hashcode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳,这部分数据官方称为Mark Word,不同的锁状态标志位,存储不同的数据,以下表格说明。
存储内容 | 标志位 | 状态 |
对象哈希码、GC分代年龄 | 01 | 未锁定 |
指向锁记录的指针 | 00 | 轻量级锁 |
指向重量级锁的指针 | 10 | 膨胀(重量级锁定) |