目录
1锁优化
1.1自旋锁与自适应锁
自旋锁:请求锁的线程不放弃处理器执行时间而是执行一个忙循环(自旋),避免挂起恢复线程的消耗。
开启,默认开启
JDK1.6引入自适应自旋锁,自旋次数不固定,由锁的状态(之前线程是否容易通过自旋获得锁)和前一次在锁上自旋的次数决定。
1.2锁消除和锁粗化
示例(基于JDK1.5)
1.3轻量级锁和偏向锁
1.3.1对象头
HotSpot虚拟机对象头分为两部分:
1存储对象自身的运行时数据,如HashCode、GC分代年龄,在32(64)位虚拟机长度为32(64)bit,称为MarkWord
2存储指向方法区对象类型的指针,如果是数组对象,还有一个额外的部分存储数组长度
MarkWord根据对象状态存储的内容不同:
1.3.2轻量级锁
在无竞争情况下使用CAS操作消除同步使用的互斥量
1.3.3偏向锁
它会偏向于第一个访问锁的线程,如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要触发同步。