对象头信息
Java的实例对象、数组对象在内存中的组成包括三部分:对象头Hearder、实例数据、内存填充。
对象头信息主要包括两部分:标记位(MarkWord)和对象指针(Class Pointer),其中标记位占8个字节,对象指针占4个字节。
此外,对于数组对象而言,额外有4个字节代表数组长度。
Java的对象头在对象不同情况下会有不同的表现形式,主要有三种状态: 无锁状态、有锁状态、GC标记状态 。其中锁状态又分为 偏向锁、轻量级锁、重量级锁 三类。


标记位和锁

重量级锁
synchronized 底层有一个monitor监视器,会监控持有锁的对象,加锁解锁都由JVM控制
经过javac编译后,会在同步块的前后分别形成MonitorEnter和MonitorExit这两个字节码指令,都需要一个refrence类型的参数来指明要锁定和解锁的对象。

针对重量级锁做了哪些优化?

锁膨胀
