
具体对象:锁的是对象**;成员方法**:那锁的就是 this ;静态方法:锁的就是这个对象.class**。Mark Word(标记字段):对象的**Mark Word部分占4**个字节,其内容是一系列的标记位,比如轻量级锁的标记位,偏向锁标记位等等。Klass Pointer(**Class对象指针):Class对象指针的大小也是4个字节,其指向的位置是对象对应的Class**对象(其对应的元数据对象)的内存地址byte和boolean是1个字节,short和char是2个字节,int和float是4个字节,long和double是8个字节,reference**是4个字节8**个字节填充。
mark word主要用来表示对象的线程锁状态,另外还可以用来配合GC、以及存放该对象的hashCode 以64系统为例,mark word是64bit来表示:

| 锁 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 偏向锁 | 加锁和解锁不需要额外的消耗,和执行非同步代码块仅存在纳秒级差距 | 如果线程间存在锁竞争,会带来额外的锁撤销消耗 | 适用于只有一个线程访问同步代码块场景 |
| 轻量级锁 | 竞争的线程不会阻塞,提高了程序的响应速度 | 如果始终得不到锁,使用自旋会消耗CPU | 追求响应时间;同步代码块执行时间非常短 |
| 重量级锁 | 线程竞争不使用自旋,不会消耗CPU | 线程阻塞,响应时间缓慢 | 追求吞吐量;同步代码块执行时间较长 |
偏向锁获取流程:
轻量级锁获取流程:
重量级锁获取流程: