扫码阅读
手机扫码阅读
Java中的锁升级机制:偏向锁、轻量级锁和重量级锁
228 2024-07-18
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章来源:
springboot葵花宝典
扫码关注公众号
Java中的锁升级机制摘要
在Java中,synchronized关键字底层由monitor实现,这种锁机制叫做重量级锁。随着JDK的发展,synchronized进行了优化,引入了偏向锁和轻量级锁,以提高在少数竞争或无竞争场景下的性能。
重量级锁
重量级锁涉及到用户态与内核态的切换以及进程上下文切换,造成较大开销。JDK 1.6为了减轻这种开销,引入了偏向锁和轻量级锁。
MarkWord
对象在JVM中的存储可以分为三部分:对象头、实例数据和对齐填充。对象头的MarkWord是锁状态信息的关键,包含hashcode、age、偏向锁标识、线程ID、epoch、指向锁记录或Monitor的指针等信息。
轻量级锁
轻量级锁应用于线程交替执行同步块的场景,通过CAS操作减少上下文切换。当存在竞争时,轻量级锁会升级为重量级锁。解锁时,若CAS失败也会导致锁的升级。
偏向锁
偏向锁适用于一个线程长时间使用锁的场景。它在第一次加锁时使用CAS操作,之后的加锁只需检查MarkWord中的线程ID。当出现多线程竞争时,偏向锁会升级。
面试题示例
在面试中,可能会问到Monitor实现的锁属于重量级锁以及锁升级的问题。需要了解synchronized的不同锁状态:无锁、偏向锁、轻量级锁和重量级锁。
锁的特点
- 重量级锁:涉及大量开销,性能较低。
- 轻量级锁:适用于无竞争场景,通过修改对象头的锁标志来提高性能。
- 偏向锁:适用于单线程持有锁的场景,通过简化加锁过程来提高性能。
文章结束语提醒读者:如需转载请注明出处,同时欢迎关注、点赞和收藏,以支持作者。
想要了解更多内容?
文章来源:
springboot葵花宝典
扫码关注公众号
springboot葵花宝典的其他文章
SpringBoot-27- @Async实现异步调用
什么是异步调用
SpringBoot-27- @Async实现异步调用
Web-9-从Filter到Listener:揭秘Java开发中的神奇力量
Filter和Listener是Java Web开发两个组件。Filter用于在请求被处理前后对请求和响应进行预处理和后处理,如身份验证、日志记录等;Listener用于监听Web应用程序的生命周期、会话和上下文的变化,并执行相应的逻辑
SpringSecurity-12-PasswordEncoder密码加密简介
SpringSecurity-12-PasswordEncoder密码加密简介为
什么是类加载器?什么是双亲委派模型?
什么是类加载器?什么是双亲委派模型?
OpenFeign 与 Spring Cloud:优雅地实现微服务间的通信
OpenFeign 是一款功能强大的微服务远程调用工具,它能够简化我们在微服务架构中的开发和通信。无论是小型项目还是大规模分布式系统,OpenFeign 都能够满足您的需求。
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线