:::warning 为什么synchronized的放在对象上? :::

    Java对象结构中的对象头描述部分是实现锁机制的关键,实际上在HotSpot JVM 虚拟机的工作中将对象结构分为三大块区域:对象头(Header)、实例数据(Instance Data)和对齐填充区域(可能存在)。如下图所示:
    image.png
    对齐填充区域(Padding):对齐填充区域并不是必须存在的,它只是起到占位作用——这是因为HotSpot JVM 虚拟机要求被管理的对象的大小都是8字节的整数倍。那么在某些情况下,就需要填充区域对不足的对象区域进行填充(随后的实例中会有)

    实例数据:这个区域当然就是描述真实的对象数据。这个区域包括了对象中的所有字段属性信息,它们可能是某个其它对象的地址引用,也可能是基础数据的数据值。

    对象头(Header):对象头是本节内容会讨论重点讨论的部分。为了便于讨论,我们讨论32位JDK版本和32位操作系统下它的内部结构(64位JDK版本和64位操作系统的情况类似,只不过各主要结构都变成了32位的长度)。视情况它又可能分为2-3个子结构:

    数组长度(只有数组形式的对象会有这个区域):数组对象的这个区域表达了数组长度。

    klass 这是一个指针区域,这个指针区域指向元数据区中(JDK1.8)该对象所代表的类描述,这样JVM才知道这个对象是哪一个类的实例

    markword 区域是该对象关键的运行时数据,主要就是这个对象当前锁机制的记录信息。

    根据对象所处的锁状态的不同,markword区域的存储结构会发生变动
    image.png