jvm学习笔记-轻量级锁内存模型

一,轻量级锁

  1. LockRecord的那个第一个成员变量是拷贝对应锁定了的java对象资源的MarkWord,
  2. Lock Record有一个Ptr指针刚开始指向自己,后面这个指针存储在锁定资源的java对象的markword中,后续可以通过java对象的MarkWord快速定位到LockRecord本身。
  3. 一个是记录Object对象的指针PtrObj,方便定位到锁定的java对象资源
  4. 还有一个是记录锁的重入次数cnt

步骤1:锁1次

我首先来介绍MarkWord(32bits)这个红色的图怎么理解?
首先这四行分别对应了“无锁”,“偏向锁”,“轻量级锁”,“重量级锁”,其实真正应用起来,只用到其中1行的数据,也就是说,我这个java对象,
无锁的时候,MarkWord里面内容就是“hashcode”,“age”,“biased_lock”,“state”,25 + 4 + 1 + 2 = 32bits
偏向锁的时候,MarkWord里面内容就是“Thread-ID”,“epoch”,“age”,“biased_lock”,“state” 23 + 2 + 4 + 1 + 2 = 32 bits
轻量级锁的时候,MarkWord里面内容就是“ptr_to_lock_record”,“state”,30 + 2 = 32bits
重量级锁的时候,MarkWord里面内容就是“ptr_to_heavyweight_monitor”,“state”,30 + 2 = 32bits
如果state = 11,那么就是标记为gc,即将垃圾回收了应该是.

在这里插入图片描述

步骤二:又锁了一次(锁重入)

CopyOfMarkWord = NULL,ObjPtr = this , cnt = cnt + 1
在这里插入图片描述

步骤三:

unlock一次锁
cnt = cnt - 1,然后根据栈里面锁的次序,后入先出,依次解锁,解锁的时候发现LockRecord里面的MarkWord为NULL,表示还可以解锁,不是最后一层锁。
后面再解锁

步骤四:

解锁到最后一层,(其实是发现了该LockRecord的MarkWord不为NULL,认为是最后一层锁),因为是最后一层,因此使用CAS把MarkWord拷贝回去object里面,再用CAS吧LockRecord指针拷贝回去原来LockRecord里面,然后ObjPtr置为NULL。

注意,中间的CAS修改如果失败,说明发生竞争,会膨胀为重量级锁!!
在这里插入图片描述

二,偏向锁

在这里插入图片描述

偏向锁主要是MarkWord里面存储获取锁的线程ID,修改biased_lock标志为1和最后两位为01
在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

职场浅谈:情商高的“4”种表现,情商高的人才更容易走向成功

职场上,情商高的人总是让人感觉很舒服,也让人情不自禁的愿意和他交往。高情商的人,最大的优点就是让人感觉舒服,这种舒服由内自外,让你情不自禁的对他产生好感,并且发自内心的愿意和他在一起,也…

win11电脑无法找到声音输出设备怎么办?查看解决方法

电脑无法找到声音输出设备是一个常见的问题,尤其是在使用Windows操作系统时。幸运的是,大部分问题都可以通过以下几种方法来解决。 一、检查物理连接 在深入诊断之前,首先要检查硬件连接是否正常。这包括: 确保耳机、扬声器或其…

大模型微调技术 --> LoRA 系列之 QLoRA (省资源能手)

QLoRA 1.摘要 作者提出了QLoRA,一种有效的微调方法,可以减少内存使用,足以在单个48 GB GPU上微调 65B 参数模型,同时保留完整的 16位 微调任务性能。 QLoRA 通过冻结的4位量化预训练语言模型将梯度反向传播到低秩适配器&#x…

Vert.x,应用监控 - 基于Micrometer / Prometheus

对于企业级的应用程序来说,我们需要通过运行指标(metrics)的监控,来了解(监控)程序的运行状态。Vert.x的核心组件内置了大量的运行指标,并支持通过Micrometer来管理这些运行指标并向后端报告。 目前Vertx内置运行指标的核心组件包括: TCP/HTT…

如何用PPT画箭头?用这2个ppt软件快速完成绘图!

ppt怎么画箭头? 有时在ppt中绘制流程图或传达承上启下的含义时,会用到箭头形状,运用到箭头元素来增强表达的清晰度和逻辑性。那可能有人会问,ppt怎么画箭头? 这似乎是一个小问题,但如果你对ppt工具不够熟…

java: 无法访问org.springframework.web.bind.annotation.RequestMapping

一、报错问题 java: 无法访问org.springframework.web.bind.annotation.RequestMapping 二、原因分析 SpringBoot使用了3.0或者3.0以上,因为Spring官方发布从Spring6以及SprinBoot3.0开始最低支持JDK17。所以仅需要将SpringBoot版本降低为3.0以下即可(或…

[ DOS 命令基础 3 ] DOS 命令详解-文件操作相关命令

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

【TS】九天学会TS语法——3.TypeScript 函数

今天学习 TypeScript 的函数,包括函数类型、可选参数、默认参数、剩余参数。 函数声明和表达式函数类型可选参数和默认参数剩余参数 在 TypeScript 中,函数是编程的核心概念之一。它们允许我们将代码组织成可重用的块,并提供了强大的抽象能力…

Kafka 源码 KRaft 模式本地运行

KRaft(Kafka Raft Metadata mode),从版本 2.8.0 开始作为测试特性引入,并在后续版本中持续得到改进和增强。 KRaft 模式是指 Kafka 使用 Raft 协议来管理集群元数据的一种运行模式,这标志着 Kafka 向去除对 ZooKeeper …

day05(单片机)SPI+数码管

目录 SPI数码管 SPI通信 SPI总线介绍 字节交换原理 时序单元 ​​​​​​​SPI模式 模式0 模式1 模式2 模式3 数码管 介绍 74HC595芯片分析 ​​​​​​​原理图分析 ​​​​​​​cubeMX配置​​​​​​​ 程序编写 硬件SPI ​​​​​​​软件SPI 作业: SPI数…

数据结构和算法-贪心算法01- 认识贪心

贪心算法 什么是贪心算法 一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优选择从而得到全局最优的解决方案。 ​ ----《算法导论》 贪心算法(Greedy Method): 所谓贪心算法就是重复地(或贪婪地)根据一个法则挑选解的一部分。当挑选完毕…

创新实践:基于边缘智能+扣子的智慧婴儿监控解决方案

在2024年全国大学生物联网设计竞赛中,火山引擎作为支持企业,不仅参与了赛道的命题设计,还为参赛队伍提供了相关的硬件和软件支持。以边缘智能和扣子的联合应用为核心,参赛者们在这场竞赛中的方案展现出了卓越的创新性和实用性&…

6款IntelliJ IDEA插件,让Spring和Java开发如虎添翼

文章目录 1、SonarLint2、JRebel for IntelliJ3、SwaggerHub插件4、Lombok插件5、RestfulTool插件6、 Json2Pojo插件7、结论 对于任何Spring Boot开发者来说,两个首要的目标是最大限度地提高工作效率和确保高质量代码。IntelliJ IDEA 是目前最广泛使用的集成开发环境…

CSS弹性布局:灵活布局的终极指南

在网页设计中,CSS 弹性布局(Flexbox)是一个不可或缺的工具。它能帮助你轻松地排列和对齐元素,尤其是在响应式设计中表现出色。今天,我们就来深入探讨一下 Flexbox 的各个属性,让你彻底掌握这个强大的布局工…

论文阅读:Computational Long Exposure Mobile Photography (一)

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章,介绍如何在手机摄影中实现长曝光的一些拍摄效果。 Abstract 长曝光摄影能拍出令人惊叹的影像,用运动模糊来呈现场景中的移动元素。它通常有两种模式,分别产生前景模糊或…

CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!

目录 一、CTF简介 二、CTF竞赛模式 三、CTF各大题型简介 四、CTF学习路线 4.1、初期 1、htmlcssjs(2-3天) 2、apachephp (4-5天) 3、mysql (2-3天) 4、python (2-3天) 5、burpsuite (…

linux 进程调度学习笔记

https://zhuanlan.zhihu.com/p/1248579228 吐血整理 | 肝翻 Linux 进程调度所有知识点 执行调度 Kernel 判断当前进程标记是否为 TIF_NEED_RESCHED,是的话调用 schedule 函数,执行调度,切换上下文,这也是上面抢占(preempt)机制的…

django图书管理系统-计算机毕业设计源码00648

摘要 图书管理系统在数字化阅读趋势、图书馆自动化管理、用户体验需求和信息技术应用等方面具有重要的研究意义。图书馆自动化管理系统的引入和应用提高了图书借阅过程的效率和准确性,减少了对手工操作和纸质记录的需求。用户对系统的易用性、查询速度、借还流程有更…

SQL实战训练之,力扣:2020. 无流量的帐户数(递归)

目录 一、力扣原题链接 二、题目描述 三、建表语句 四、题目分析 五、SQL解答 六、最终答案 七、验证 八、知识点 一、力扣原题链接 2020. 无流量的帐户数 二、题目描述 表: Subscriptions ------------------- | Column Name | Type | ------------------- | accoun…

ARM base instruction -- ccmp (immediate)

Conditional Compare (immediate) sets the value of the condition flags to the result of the comparison of a register value and an immediate value if the condition is TRUE, and an immediate value otherwise. 此指令一般出现在 cmp 指令之后,表示双重比…