synchronized同步的位置:
1、普通同步方法,锁是当前实例对象;
2、静态同步方法,锁是当前类的class对象;
3、同步方法块,锁是括号里面的对象。
synchronized存于Java对象头中
虚拟机的对象头主要包括两部分数据:Mark Word(标记字段)、Klass Pointer(类型指针)。
Mark Word:存储对象自身的运行时数据
例如:哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳等等
当Java对象头的Mark Word发生锁升级时,非固定长度的Mark Word数据结构也会发生改变
Klass Point:对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例
Java对象头储存结构:
synchronized的同步机制Monitor
每一个