偏向锁到轻量级锁的升级过程(耗资源)

news2024/11/23 12:21:10

目录

上原理:

细说原理:

什么是锁记录呢?

什么是Mark Word 呢?

上图解:


上原理:

偏向锁使⽤了⼀种等到竞争出现才释放锁的机制,所以当其他线程尝试竞争偏向锁时, 持有偏向锁的线程才会释放锁偏向锁升级成轻量级锁时,会暂停拥有偏向锁的线程,重置偏向锁标识,这个过程看起来容易,实则开销还是很⼤的,⼤概的过程如下:

  1.  在⼀个安全点(在这个时间点上没有字节码正在执⾏)停⽌拥有锁的线程。
  2.  遍历线程栈,如果存在锁记录的话,需要修复锁记录和Mark Word,使其变成⽆锁状态。
  3.  唤醒被停⽌的线程,将当前锁升级成轻量级锁。

所以,如果应⽤程序⾥所有的锁通常出于竞争状态,那么偏向锁就会是⼀种累赘,对于这种情况,我们可以⼀开始就把偏向锁这个默认功能给关闭:

-XX:UseBiasedLocking=false

细说原理:

问题:在偏向锁状态下,如果有其他线程竞争同一个对象的锁,那么偏向锁就需要升级成轻量级锁。此时,JVM会唤醒竞争的线程,让它们重新尝试获取锁 意思是:先有一个锁B竞争偏向锁A,然后阻塞掉这个锁B,再然后升级A锁为轻量级锁 重新唤醒锁B继续竞争一次吗?

答:

错误!在偏向锁状态下,如果有其他线程竞争同一个对象的锁,JVM会撤销偏向锁并将对象状态升级为轻量级锁,然后唤醒竞争的线程,让它们去竞争锁。具体的过程如下:

  1. 偏向锁的持有者线程被挂起,阻止它继续执行。
  2. JVM遍历线程栈,找到持有偏向锁的线程,并检查它的锁记录是否存在。如果存在,则需要清空该锁记录,并更新对象头的Mark Word。(如果锁记录存在,JVM需要清空该锁记录,并更新对象头的Mark Word,将其标记为无锁状态。这样做的目的是为了避免原持有锁的线程通过之前的锁记录再次获取锁。)
  3. JVM将对象头的Mark Word 更新为指向锁记录的指针,表示对象状态已经变为轻量级锁。
  4. JVM唤醒持有偏向锁的线程,让它重新执行。此时,它会尝试获取对象的锁,但会发现对象已经不再是偏向锁状态,于是会转而竞争锁。(感觉被抛弃了)
  5. 如果其他线程也在竞争同一个对象的锁,则它们会按照轻量级锁的竞争规则去竞争锁,而不是偏向锁的竞争规则。

因此,不是先让锁B竞争偏向锁A,然后阻塞锁B,再升级A锁为轻量级锁,再重新唤醒锁B。而是在撤销偏向锁的同时,就会唤醒所有竞争锁的线程,让它们重新竞争锁。

什么是锁记录呢?

当对象状态为偏向锁时, Mark Word 存储的是偏向的线程ID;
当状态为轻量级锁时, Mark Word 存储的是指向线程栈中 Lock Record 的指针;
当状态为重量级锁时, Mark Word 为指向堆中的monitor对象的指针。

什么是Mark Word 呢?

可以看这个:java对象头 MarkWord_markword 对象头_烟雨星空的博客-CSDN博客

上图解:

上图表示:在偏向锁状态下,如果有其他线程竞争同一个对象的锁,那么偏向锁就需要升级成轻量级锁,这就是从竞争到撤销偏向锁的一个过程。

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

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

相关文章

nssctf web 入门(3)

目录 [NISACTF 2022]easyssrf [SWPUCTF 2021 新生赛]ez_unserialize [SWPUCTF 2021 新生赛]no_wakeup 这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析&…

FLStudio21中文版本好不好用?值不值得下载

FLStudio中文21最新版本以其使用速度而闻名,是一个高度复杂的音乐制作环境。现代的DAW是一种非凡的野兽。首先,它在很大程度上把自己放在了(几乎)每个人记录过程的核心。其次,通过在价格适中的软件中模拟完整的工作室体验,它在音乐…

国内版的ChatGPT弯道超车的机会在哪里?

前言 从去年11月最后一天ChatGPT诞生,截至目前,ChatGPT的热度可谓是爆了。众所周知,ChatGPT是美国“开放人工智能研究中心”研发的聊天机器人程序,它是一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人…

【数据分析】— 特征工程、特征设计、特征选择、特征评价、特征学习

【数据分析】— 特征工程特征工程是什么? (Feature Engineering)特征工程的意义特征工程的流程特征的设计从原始数据中如何设计特征?基本特征的提取创建新的特征函数变换特征独热特征表示 One-hot Representation数据的统计特征TF-IDF(词频-逆…

「Cpolar」看我如何实现公网远程控制Mac OS【使用mac自带VNC】

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…

探寻人工智能前沿 迎接AIGC时代——CSIG企业行(附一些好玩的创新点)

上周我有幸参加了由中国图像图形学会和合合信息共同举办的CSIG企业行活动。这次活动邀请了多位来自图像描述与视觉问答、图文公式识别、自然语言处理、生成式视觉等领域的学者,他们分享了各自的研究成果和经验,并与现场观众进行了深入的交流和探讨。干货…

重感知还是重地图?其实无需选择

近来,关于自动驾驶应该重感知还是重地图是个热点话题,很多重量级车厂、自动驾驶供应商都开始提出重感知轻地图的方案,并承诺很快能发布出对应的产品。业界也出现了高精地图已“死”等类似的言论。 一时之间,似乎轻地图已经成为了…

三种实现模型可视化的方式(print, torchinfo, tensorboard)

记录一下自己使用的三种模型可视化的方式,从简单到难 Print 最简单的是print,就不用多说了。 Torchinfo from torchinfo import summary import torch model (...) summary(model, (1,3,128,128))即可按照像文档路径一样的方式输出结构,…

算法模板(2):数据结构(5)做题积累

数据结构(3) 一、并查集 238. 银河英雄传说 有 NNN 艘战舰,也依次编号为 1,2,...,N1,2,...,N1,2,...,N,其中第 iii 号战舰处于第 iii 列。有 TTT 条指令,每条指令格式为以下两种之一:M i j,表…

Linux lvm管理讲解及命令

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 前言 目录 一、lvm管理 1.Logical Volume Manager,逻…

【运维笔记】VM centos 环境安装

镜像选择 阿里镜像源 注意在安装时,安装非图形化界面选择minimal版本安装。(笔者在安装时选择了erverything和DVD,发现都是图形界面hhh,浪费了一早上时间) 翻阅百度垃圾堆,版本号都推荐7.6-7.9&#xff…

图解国家网信办《生成式人工智能服务管理办法(征)》| 附下载

伴随ChatGPT兴起,生成式人工智能技术正作为一种创造性应用,牵引场景创新,推动新技术迭代升级和产业快速增长。由于生成式人工智能处于发展初期,技术成熟度、政策合规性等发展不足,导致其极易面临非法获取数据、个人隐私…

基于差分进化算法的含DG配电网无功优化模型

目录 1 主要内容 目标函数 算法流程 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序参考《自适应多目标差分进化算法在计及电压稳定性的无功优化中的应用》,以网损和电压偏差为目标,考虑DG无功出力和电容器组,建立多目标无功优化…

OpenAI-ChatGPT最新官方接口《文本交互》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(一)(附源码)

Text completion 文本交互前言Introduction 导言Prompt design 提示设计Basics基础知识TroubleshootingClassificationImproving the classifiers efficiency 提高分类器的效率Generation 总结Conversation 对话Transformation 变化Translation 翻译Conversion 转化Summarizati…

联想服务器配置RAID

一、背景描述 目前有台联想服务器,配置如下: CPU:2颗处理器,40核 内存:512GB 磁盘:2*960GB SATA 4*2.4TB SAS 计划在联想物理机上安装 Vmware 的 ESXi 6.7 虚拟化管理软件,作为虚拟化服务器。…

Linux驱动开发——字符设备

目录 Linux设备分类 字符设备驱动基础 字符设备驱动框架 虚拟串口设备 Linux设备分类 Linux系统根据驱动程序实现的模型框架将设备驱动分为下面三种。 (1)字符设备驱动:设备对数据的处理是按照字节流的形式进行的,可以支持随机访问,也可以不支持随…

【解决】You May need an additional loader to handle the result of these loaders

说在前面 最近在新拉项目执行install以及run命令时,两个项目同时报了类似的错误,报错详情如下图所示。 因为之前同事运行代码没有问题,所以基本的问题可以定位在某个依赖版本问题,考虑到时间先后,大概率是新版本使用…

把中文翻译成英语的软件-chatgpt、谷歌、百度、批量翻译

用chatgpt怎么实现中文英文在线转换翻译 要实现中文英文在线转换翻译的代码,可以使用OpenAI的ChatGPT模型实现。以下是实现该功能的简要教程: 准备环境 安装Python 3.x,使用pip或conda安装transformers及相关依赖: pip install…

【算法训练 (day2)】积木画(dp问题)

目录 一.问题 题目描述 输入格式 输出格式 输出样例 二.解题思路 合法性判定(状态压缩): 推导dp式: 代码实现: 一.问题 题目描述 小明最近迷上了积木画,有这么两种类型的积木,分别为 I…

MySQL多表查询内连接外连接详解,join、left join、right join、full join的使用

目录 1、多表查询概览 1.1、分类 1.2、外连接的分类 1.3、常用的SQL语法标准 2、内外联接案例 2.1、初始化表 2.2、内连接 2.3、外连接案例 2.4、全连接案例 2.5、union和union all 2.6、实现MySQL全连接 2.7、内外连接面试基础 2.8、SQL99多表查询新特性 1、多表…