JVM中的锁优化

锁优化

Jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。

  • 什么是锁升级,降级?

锁的4中状态:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态(级别从低到高)。
所谓的锁升级、降级,就是 JVM 优化 synchronized 运行的机制,当 JVM 监测到不同的竞争状况是,会自动切换到不同的锁实现。这种切换就是锁的升级、降级。

锁升级

偏向锁

因为经过大量的研究发现,大多数时候是不存在锁竞争的,常常是一个线程多次获得同一个锁,因此如果每次都要竞争锁会增大很多没有必要付出的代价,为了降低获取锁的代价,才引入的偏向锁。

在程序的一开始,处于无锁状态。紧接着,有一个线程申请锁,此时通过CAS竞争锁(CAS保证了此竞争行为的原子性),获取锁成功,Mark Word 将标记为偏向锁。当同样的线程再次到来,发现是锁的持有者并且是偏向锁,直接进入临界区。
因此,偏向锁意味着,不会发生竞争条件,因为只有一个线程。

轻量级锁

随着程序的运行,有新的线程要进入临界区,通过CAS竞争锁失败。Mark Word立即将偏向锁标记锁为轻量级锁,因为已经发生了竞争条件。紧接着,会反复同通过CAS为线程获取锁,如果占有锁的线程在临界区待的时间很短,那么申请锁的线程将很快拿到锁。
因此,轻量级锁意味着,有竞争条件,但是大家能很快地被分配到锁。

重量级锁

当然,申请锁的线程并不总是能很快地获取到锁,与其反复地CAS重试而浪费CPU时间,不如直接将线程阻塞住。那么,在轻量级锁的情况下,如果有线程超过一定次数的重试还是获取不到锁,Mark Word立即将轻量级锁标记为重量级锁,此后所有获取不到锁的线程将被阻塞,需要Monitor的参与。

因此,重量级锁意味着,在有竞争条件的情况下,线程不能很快地被分配到锁。

Synchronized的锁只能膨胀,不能收缩。偏向锁和轻量锁为乐观锁,重量级锁为悲观锁。

Synchronized的好处在于,它的优化、锁申请释放、锁的分配都是自动的,开发者能快速地使用。

轻量级锁什么时候升级为重量级锁?

线程1获取轻量级锁时会先把锁对象的对象头MarkWord复制一份到线程1的栈帧中创建的用于存储锁记录的空间(称为DisplacedMarkWord),然后使用CAS把对象头中的内容替换为线程1存储的锁记录(DisplacedMarkWord)的地址;

如果在线程1复制对象头的同时(在线程1CAS之前),线程2也准备获取锁,复制了对象头到线程2的锁记录空间中,但是在线程2CAS的时候,发现线程1已经把对象头换了,线程2的CAS失败,那么线程2就尝试使用自旋锁来等待线程1释放锁。

但是如果自旋的时间太长也不行,因为自旋是要消耗CPU的,因此自旋的次数是有限制的,比如10次或者100次,如果自旋次数到了线程1还没有释放锁,或者线程1还在执行,线程2还在自旋等待,这时又有一个线程3过来竞争这个锁对象,那么这个时候轻量级锁就会膨胀为重量级锁。重量级锁把除了拥有锁的线程都阻塞,防止CPU空转。

锁膨胀

当轻量级锁失败,虚拟机就会使用重量级锁。使用重量级锁时,对象的Mark Word中的末尾的2位会被设置为'10'。整个Mark Word表示指向monitor对象的指针。

JVM对锁的优化
1.自旋锁

在没有加入锁优化时,Synchronized是一个非常“胖大”的家伙。在多线程竞争锁时,当一个线程获取锁时,它会阻塞所有正在竞争的线程,这样对性能带来了极大的影响。在挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作对系统的并发性能带来了很大的压力。同时HotSpot团队注意到在很多情况下,共享数据的锁定状态只会持续很短的一段时间,为了这段时间去挂起和回复阻塞线程并不值得。在如今多处理器环境下,完全可以让另一个没有获取到锁的线程在门外等待一会(自旋),但不放弃CPU的执行时间。等待持有锁的线程是否很快就会释放锁。为了让线程等待,我们只需要让线程执行一个忙循环(自旋),这便是自旋锁由来的原因。

2.锁粗化

如果一系列的连续操作都是对同一个对象反复加锁和解锁,甚至加锁操作是出现在循环体中的,那即使没有线程竞争,频繁地进行互斥同步操作也会导致不必要的性能损耗。在这种情况下,虚拟机便会把所有的锁操作优化成对锁的一次请求,从而减少对锁的请求同步次数,这个操作叫做锁粗化。

3.锁消除

锁消除是指JIT编译器在运行时,将一些在代码上同步了但实际上不可能存在共享数据竞争的锁进行消除。

锁消除主要是根据逃逸分析技术来判定的,如果判断在一段代码中,堆上的所有数据都不会逃逸出去从而被其它线程访问到,那就可以把它们当做栈上数据对待,认为它们是线程私有的,同步加锁自然就无需进行了。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1183982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计案例】基于SpringBoot+微信小程序的微信电影院票务系统管理系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Python编程最好的就业方向是什么?

Python的就业表现一直稳居编程语言第一梯队,凭借场景广、门槛低的优势成为求职热门。它覆盖AI、数据分析、Web 开发等多个高薪赛道,岗位需求年均增长显著,应届生与转行人群都能找到适配机会。那么Python编程最好的就业方向是什么?请看下文。…

Github千星项目之.Net(四)

01.machinelearning Star:8.1k ML.NET是.NET的开放源码和跨平台机器学习框架。 ML.NET是一个用于.NET的跨平台开源机器学习(ML)框架。 ML.NET允许开发人员在其.NET应用程序中轻松构建、训练、部署和使用自定义模型,而无需事先…

APP/小程序个人信息保护合规自查手册(附整改方案)

本指南基于《中华人民共和国个人信息保护法》《数据安全法》《网络安全法》《常见类型App必要个人信息范围规定》及GB/T 35273-2020《个人信息安全规范》等核心法规标准,结合2025-2026年监管执法趋势(如常态化专项整治、跨境数据监管收紧、AI应用数据合规…

Linux文件权限777和755的区别!

Linux 文件权限是系统安全的核心基石,它通过严格的权限划分,决定了不同用户、用户组对文件和目录的访问、修改、执行权限,直接关系到系统的稳定性与数据安全。那么Linux文件权限777和755的区别是什么?请看下文。Linux文件权限使用三位数字来…

文件脱敏程序设计思路

文件脱敏的核心是:识别敏感信息 → 生成可追溯的替换结果 → 保持文件可用性(格式/结构不破坏)→ 输出合规审计证据。下面给你一套可落地的设计框架。1) 先定“脱敏目标与边界”(否则做不准) 1.1 明确敏感信息范围&…

电路架构的三维呈现:利用芯片3D动画解锁IC设计的视觉奥义

将抽象的电路架构转化为易于理解的3D逻辑模型是当前IC设计中的一项创新技术。特别是随着半导体工艺向5nm及更小的节点不断推进,传统平面设计图已难以有效呈现其复杂性。3D动画在此背景下应运而生,为工程师、设计师甚至市场专家提供了一种全新的视角&…

亲测Meta-Llama-3-8B-Instruct:8K上下文对话效果超出预期

亲测Meta-Llama-3-8B-Instruct:8K上下文对话效果超出预期 1. 引言:为何选择 Meta-Llama-3-8B-Instruct? 在当前开源大模型快速迭代的背景下,如何在有限算力条件下实现高质量的对话与指令执行能力,成为个人开发者和中…

小程序计算机毕设之基于springboot+微信小程序的电影院票务、在线购票话剧票务管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

误差反向传播法(链式法则)

链式法则 前面介绍的计算图的正向传播将计算结果正向(从左到右)传递,其计 算过程是我们日常接触的计算过程,所以感觉上可能比较自然。而反向传播将局部导数向正方向的反方向(从右到左)传递,一开…

2026企业认证体系迎大洗牌:Net-NTLMv1彩虹表数据库 敲响NTLMv1丧钟

2026年1月15日,谷歌旗下网络安全巨头Mandiant的一则公告,在全球网络安全圈掀起轩然大波——其正式发布了一套完整的Net-NTLMv1彩虹表数据库,将这一存续近40年的老旧认证协议推向淘汰边缘。这套托管于Google Cloud、总容量达数百GB的工具集&am…

李飞飞的World Labs联手光轮智能,具身智能进入评测驱动时代!

具身智能生态中最受关注的两家公司双刃合璧,原因无他,正是瞄准困扰行业已久的「规模化评测」问题,发起一波攻势。最火世界模型,最火具身智能基建,联手了!前者,是李飞飞旗下的World Labs&#xf…

【tensorRT从零起步高性能部署】22-TensorRT基础-模型推理动态shape

一、前言:为什么需要动态Shape? 你复习的TensorRT课程里讲动态Shape,核心解决的是「模型推理时输入尺寸不固定」的问题: 静态Shape:模型编译后输入尺寸固定(比如只能处理3x3的图片),…

反向传播为何如此高效?解锁其核心引擎:链式法则

反向传播为何如此高效?解锁其核心引擎:链式法则 一、从计算图的反向传播说起 我们先来看一个最简单的例子。假设有一个计算:y f(x),它的反向传播过程如下图所示:关键点: 反向传播时,信号&#…

内网凭据挖掘技术深度揭秘:从终端渗透到网络服务的企业防线突破全链路解析

在数字化转型加速推进的当下,企业内网承载着核心业务数据、知识产权与商业机密,成为网络攻击的“必争之地”。而凭据挖掘,作为攻击者实现内网横向移动、权限提升与持久化控制的“核心武器”,其技术手段正随着企业防御体系的升级不…

这家西方开源大模型公司,开源出了DeepSeek-V3背后的架构!头部模型表现都差不多了,Mistral CEO自曝如何赚钱

如果各家前沿模型的性能已经非常接近,几乎难以分出谁更强——那会发生什么?面对《the Big Technology Podcast》抛出的问题,Mistral AI的 CEO Arthur Mensch 表示:大模型肯定会走向商品化,当模型表现越来越接近&#x…

【普中STM32F1xx开发攻略--标准库版】-- 第 29 章 内部温度传感器实验

(1)实验平台:普中STM32F103朱雀、玄武开发板 上一章我们介绍了 ADC 模数转换实验, 知道 ADC 内部有一个通道连接着芯片的温度传感器, 这一章我们就来学习下 STM32F1 的内部温度传感器。 本章要实现的功能是: 通过芯片内部温度传感…

2026开年炸雷!Apache Kafka三重高危漏洞肆虐:RCE+DoS+SSRF齐发,波及2.0.0-3.9.0全版本,企业升级刻不容缓

一、漏洞背景与披露全景 2026年初,Apache软件基金会通过官方安全通报渠道,紧急披露了影响Kafka核心组件的3个高危安全漏洞,分别编号为CVE-2025-27817、CVE-2025-27818、CVE-2025-27819。这批漏洞由全球多个安全团队协同发现,其中C…

方程豹豹8开启智驾撞牛未停车 车主质疑:智驾有什么用呢?

【文/深度评车&财经三剑客】1月12日,济南的潘先生反映2025年6月购买了一辆方程豹豹8,12月在内蒙古使用智能辅助驾驶时,侧面撞到牛身上。车辆提醒、躲闪及制动功能都没有启动,4S店表示:强光照射激光雷达导致短暂“失…

手搓HTML解析器:500行代码实现完整的DOM树构建

手搓HTML解析器:500行代码实现完整的DOM树构建引言:为什么需要理解HTML解析器?在Web开发中,DOM(文档对象模型)是我们与网页交互的核心接口。现代前端框架如React、Vue都构建在DOM之上,但很少有人…