JVM--偏向锁

定义在对象的对象头信息里。所以它也最轻。

当线程获取对象的偏向锁时,对象头的Mark word中会记录当前偏向的线程,所以mark word里存在线程信息,偏向方式是没有竞争时取消当前线程的同步操作。但又不能因为偏向失去锁的意义,所以竞争时,重新偏向其他线程。所以偏向锁在竞争少时能提高性能,竞争多时偏向锁多线程间切换,起不到偏向的作用。

 

书本解释

偏向锁mark word格式

 

23位偏向锁线程|2位偏向锁时间戳|4位对象年龄|1(偏向锁固定位)|01(表示可偏向/未锁定)

 

核心思想

 

线程获取锁时没有线程间竞争,那么则取消获取锁的同步操作。即获取锁的线程后续操作不会走同步操作。

 

参数

-XX:+/-UseBiasedLocking 启动/禁用偏向锁,默认虚拟机启动4秒后启动偏向锁

-XX:BiasedLockingStartupDelay 虚拟机启动后,立刻启动偏向锁

 

偏向锁Mark Word记录了获取锁的线程,而且核心思想是同一线程多次访问,去除同步操作,所以偏向锁适用于竞争不激烈的场景,可以避免多余的同步操作。

当处于竞争激烈的场景下,偏向锁在多线程的切换,并不能一直处于偏向模式,达不到优化效果。

你可能感兴趣的:(JVM,笔记,java,jvm,偏向锁)