CPU :二进制
解释执行器/JIT优化 -- 》汇编指令 硬件原语 --》 二进制
1) 堆 class 对象 new
2)
Lock 触发硬件缓存锁定机制(总线锁,系统总线 -- 总线桥 -- 内存总线)
缓存一致性协议 MESI (modified-engross独占-share-invaild)
)
缓存行锁定 --》原子
(64byte) 大于64字节时,放弃缓存一致性协议,换总线锁。
Synchronized:
Java 对象(class对象)大小:8字节的整数倍
1)对象头:mark word(32位),对象的hash code,元数据指针:class对象 --》 kclass对象,
2)数组长度(数字对象才有),
3)示例数据:
4)对齐填充位
Synchronized 互斥锁,应用 方法 同步块 加锁力度 原理 锁的优化膨胀 锁的状态在对象的markword里 基于逃逸分析 锁的消除 锁的粗化
1)锁的膨胀升级(不可逆)无锁 -- 偏向锁 -- 轻量级锁(自旋锁) --重量级锁
2)Jvm--锁的粗化:
Synchronized(obj){sout…1}
Synchronized(obj){sout…2}
Synchronized(obj){sout…3}
-->
Synchronized(obj){sout…123}
逃逸分析:
对整个代码扫描,同一个对象的锁上了又释放再上再释放,将同一个对象的多个锁放在一起。
3)Jvm-- 锁的消除
逃逸分析:
当加锁没有意义的时候,会去掉。
Java对象(标量的聚合量):8大基本数据类型(标量)
New Object() --> heap 堆 ,逃逸分析优化 --> 将标量直接放到线程栈里取用
AQS
抽象队列同步器
ReetrantLock:基于AQS 的互斥锁 实现了公平/非 可重入
区别:s---JVM内置锁 r--加锁手动
多线程