synchronized的底层实现原理
上锁 就是改变对象的对象头
类的组成:字节码文件
对象的状态有五种?
1.无状态
2.偏向锁
3.轻量锁
4.重量锁
5.gc标记
对象的组成:
1.java对象的实例数据--不固定
2.对象头--固定
对象头的组成:(64位操作系统中对象头所占空间大小为96bit)
Mark Word 64bit 保存了对象的状态,哈希值以及GC 指向类的指针 数组长度(只有数组对象才有)
klass pointer(官方文档)/Class Metada Address 32bit(指针压缩后)或64bit(未进行指针压缩)
3.数据对齐
对象所占内存的大小必须是8的整数倍
如:public class L{
boolean flag=false;//1 byte
//7 byte 填充数据
}
32位操作系统上的对象头大小是32bit==8byte
64位操作系统上的对象头大小是96bit==12byte