不积跬步无以至千里,后继才能薄发
之前在看JVM的锁优化中看到JVM中对synchronized实现中,在不同的情况下会对锁进行优化,其中有几种不同的锁实现,此篇做一个笔记,在这个月的月度分享中会将这篇分享到部门同事,共同进步~
对象头模型:
轻量级锁的“轻”是对比重量级锁来的,因为重量级锁需要对互斥量进行更新,操作更加消耗性能,而轻量级锁则是在此基础上继续优化,轻量级锁锁定不会去更新互斥量,而是会在调用这个对象的栈帧中,划出一个区域存放markword的部分信息,然后吧对象头的markword信息复制到这块空间中,然后对markword进行cas更新操作,如果成功则轻量级锁锁定成功。
基本前提就是线程间不会经常需要进行同步。
重量级锁需要MonitorObject,如轻量级锁膨胀的逻辑:
偏向锁在轻量级锁的基础上,更加的“轻量”,因为markword大小的原因,它只在未计算出hashcode之前可以使用(需要JVM参数开启,jdk1.6+默认开启),具体过程是: