证明java对象头偏向锁、轻量级锁、重量级锁以及其性能对比

本文详细介绍了Java对象头的偏向锁、轻量级锁和重量级锁的原理与性能差异。偏向锁在无竞争时提供高效锁定,轻量级锁在单线程或交替执行时避免操作系统互斥操作,而重量级锁在多线程竞争时性能下降,调用操作系统函数。性能上,偏向锁优于轻量级锁,轻量级锁优于重量级锁。通过理解这些锁机制,开发者可以更好地优化代码以利用锁的效率。
摘要由CSDN通过智能技术生成

 

1. 偏向锁:偏置锁模式用于使锁偏向给定的锁线程。当这个模式设置在低三位时,锁要么偏向某个特定的线程,要么是“匿名的”偏向,表明它可能是有偏见的。当锁是偏向于一个给定的线程,锁定和解锁可以在不使用原子操作的情况下由该线程执行。当锁的偏差被撤销时,它将恢复到正常状态下面描述的锁定方案。注意:Hotspot不会在JVM启动的最初几秒(目前是4秒)内启用偏向锁定对象。这是因为一些基准测试和NetBeans在启动时存在大量的线程争用,而且撤销成本非常高,可以在ieda设置关闭延迟启动 -XX:BiasedLockingStartupDelay=0 如下图,如果调用了计算hashcode()方法锁将会失去偏向线程特性。

2. 轻量级锁:轻量级锁是在单线程中或者多线程交替或互斥执行中没有锁竞争时候经过锁膨胀过程升级成为轻量级锁。得到cup 不需要调用os函数,调用jvm本身实现的锁函数。轻量级锁尝试在应用层面解决线程同步问题,而不触发操作系统互斥操作,轻量级锁减少多线程进入互斥几率,不能代替互斥,效率比偏向锁慢。

3. 重量级锁:在多线程竞争锁过程锁膨胀升级成为重量级锁,每次获取锁都调用os锁函数包括释放锁也同样调用os函数,性能比轻量级锁慢。如果调用wait()方法则锁立刻变成重量级锁。

一、首先我们需要知道什么是java对象头?

然后到jdk源码的hotpot(jvm)目录知道

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值