本文主要是介绍偏向锁的设置和被取消,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
偏向锁的格式头:
开启偏向锁的方式:
禁用偏向锁
VM 参数 -XX:-UseBiasedLocking
特殊情况:
调用 对象的hashcode方法时,偏向锁也会被禁用. 这是因为调用了对象的 hashCode,但偏向锁的对象 MarkWord 中存储的是线程 id(54位),如果调用 hashCode(31位) 会导致偏向锁被撤销
撤销 - 其它线程使用对象:
当有其它线程使用偏向锁对象时,会将偏向锁升级为轻量级锁
批量撤销:
当撤销偏向锁阈值超过 40 次后,jvm 会这样觉得,自己确实偏向错了,根本就不该偏向。于是整个类的所有对象 都会变为不可偏向的,新建的对象也是不可偏向的
锁消除优化:
当执行的方法中的对象以及上锁的对象没有逃离方法的作用范围时,加锁与否并不会影响代码的执行速度,在这种情况下JVM底层是通过 解释+编译 的方式运行, JIT即时编译器 会对代码做优化, 在运行的代码超过一定域值时,该代码会变成热点代码(Hotspot),在此种锁情况下, JIT会默认将锁消除,当然也可以手动设置JVM参数:
-XX:-EliminateLocks 消除锁消除优化
这篇关于偏向锁的设置和被取消的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!