面试必问之锁的底层原理

news2024/10/5 10:39:59

 sychrionzed的底层原理:

实例数据:存放类的属性数据信息,包括父类的属性信息;
对齐填充:由于虚拟机要求 对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐;根据寻址优化算法

synchrionzed用的锁就是存在对象头中。hotspot虚拟机的对象头主要包括两部分:MarkWord(标记字段),ClassPointer(类型指针)。其中classPointer时对象指向它类元数据的指针。虚拟机通过这个这个指针可以确定这个对象指向哪一个实列。

 锁虽然解决了数据的安全性,但是同时也带来了 性能的下降。sychronized在JDK1.6后引入锁升级的优化。

锁升级的原理:
 偏向锁:在锁对象的对象头中记录一下本次获取锁的线程对应的id,如果下次再来获取锁
 就可以支持获取到。也就是支持 锁重入。
 
 轻量级锁:当偏向锁升级而来的,当一个线程获取到锁后,此时这把锁时偏向锁,如果此时有
 第二个线程来竞争锁,偏向锁就会升级轻量级锁,之所以成为轻量级锁,是为了和重量级锁区分开来的,
 轻量级锁底层时通过自选来实现的,并不会阻塞线程。
 
 如果自旋次数过多任然没有获取锁,就会升级重量级锁,重量级锁

自旋锁

线程的阻塞和唤醒需要CPU从用户态转为核心态,频繁的阻塞和唤醒对CPU来说是一件负担很重的工作,势必会给系统的并发性能带来很大的压力。同时我们发现在许多应用上面,对象锁的锁状态只会持续很短一段时间,为了这一段很短的时间频繁地阻塞和唤醒线程是非常不值得的

所以引入自旋锁,何谓自旋锁?

所谓自旋锁,就是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。

\

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

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

相关文章

开源免费多语言翻译模型

今天给大家介绍赫尔辛基大学开源免费的多语言翻译模型,赫尔辛基大学开发了1400多个多语种翻译模型,我们可以在Hugging Face网站上免费下载免费使用这些模型,今天我来介绍其中的中译英和英译中两个模型。 我机器的环境是win11,adaconda,pytho…

C++笔记之是否知道了一个数组首元素的地址就可以获取该整个数组?-合众新能源汽车面试官问题

C笔记之数组名和指针GPT问答记录 事前提要:前段时间去面合众新能源汽车,面试官说知道了一个数组首元素的地址,就可以获取该整个数组,我当时就困惑,不知道大小和长度,只知道地址怎么就能获取。但也没反驳面…

windows,win10去掉命令行窗口cmd选中内容后导致中断的问题

背景 cmd黑窗口被选中内容后,会暂时挂起/阻塞进程。如:node.js的一些命令,选中刷出的日志会导致请求阻塞、http请求后端api接口的日志被选中后也会阻塞 方法 左键点击cmd黑窗口左上角的图标,选择 “属性”(要注意选…

9.3.1 【Linux】区块选择(Visual Block)

当我们按下 v 或者 V 或者 [Ctrl]v 时,这个时候光标移动过的地方就会开始反白,这三个按键的意义分别是: 9.3.2 多文件编辑 我们可以使用vim后面同时接好几个文件来同时打开,相关的按键有: 9.3.3 多窗口功能 分区窗口…

高压放大器在半导体测试行业的应用

半导体测试是一项非常重要的工作,它涉及到对半导体芯片进行电气、物理等方面的测试,以确保产品质量和性能。测试过程中需要使用高精度、高可靠性的测试设备和仪器,而高压放大器则是其中的一种重要工具。 在半导体测试中,高压放大器…

【ARM】-异常中断处理概述

文章目录 控制程序执行流程ARM 体系中异常中断种类 控制程序执行流程 在 ARM 体系中通常有以下 3 种方式控制程序的执行流程: 在正常程序中执行过程中,每执行一条 ARM 指令,程序计数寄存器 PC 的值加 4 个字节;每执行一条 Thumb…

Java——异常学习

一、什么是异常 Java的异常是指在程序运行过程中可能发生的错误或异常情况,如数组越界、除零错误、空指针等。 备注:(开发过程中的语法错误和逻辑错误不是异常) 二、Java异常分类 三、异常处理方式 下面先看以下代码 //下面创建一个用于计算的类 class calculate…

OpenCV读取一张深度图像并显示

#include <iostream> #include <opencv2/imgcodecs.hpp> #include <opencv2/opencv.hpp> #include

openGauss学习笔记-01 什么是openGauss

文章目录 openGauss学习笔记-01 什么是openGauss1.1 openGauss是一个数据库管理系统1.2 openGauss数据库是关系型的1.3 openGauss软件是开源的1.4 openGauss数据库具有高性能、高可用、高安全、易运维、全开放的特点1.4.1 高性能1.4.2 高可用1.4.3 高安全1.4.4 易运维1.4.5 全开…

Nanopc T4 教程使用及获取

所有资料从以下链接获取 ● Wiki教程&#xff1a;http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T4/zh 机械结构图&#xff08;dxf格式&#xff09;&#xff1a;http://wiki.friendlyarm.com/wiki/images/b/bc/NanoPC-T4_1802_Drawing%28dxf%29.zip 原理图&#xff1a;h…

一百二十七、海豚调度——dolphinscheduler205单机版安装

一、前提准备 1.JDK1.8 2.MySQL&#xff08;5.7&#xff09; 3.ZooKeeper&#xff08;3.4.6&#xff09; 4.需安装进程树分析工具 psmisc [rootlinux128 ~]# sudo yum install -y psmisc 5.海豚调度安装包和MySQL驱动包 apache-dolphinscheduler-2.0.5-b…

Meta推出推特竞争对手APP:Threads

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 今日&#xff0c;Meta 正式在美国推出独立的社交应用程序Threads&#xff0c;这是一款直接针对推特的应用程序。类似于Twitter&#xff0c;可以发表短消息和图片。和国内的新浪微博一个意思。 Th…

WIN11家庭中文版使用ENSP+VirtualBox启动AR失败40错误+未完全关闭hyper-V,以及安装VirtualBox兼容性问题

使用版本&#xff1a;eNSP 1.3.00.100VirtualBox 5.2.44WinPcap_4_1_3Wireshark最新版。 win11系统最好按照上述版本安装&#xff0c;VirtualBox不要安装更高版本&#xff0c;否则可能出现不兼容情况&#xff0c;Wireshark版本要求还好&#xff0c;安装顺序是VirtualBox 5.2.4…

Filter过滤器总结

文章目录 1. Filter介绍2. Filter分析2.1 初始化使用2.2 WebFilter 配置2.3 其他 3. Filter应用3.1 筛选访问路径3.2 判断用户是否存在 1. Filter介绍 介绍: Filter是过滤器&#xff0c;通常可以将请求的资源拦截下来从而实现一些补充操作。 2. Filter分析 2.1 初始化使用 …

多地ping检测域名解析ip地址—js混淆对抗

多地ping检测域名解析ip地址—js混淆对抗 0x1 概述 由于项目需求&#xff0c;给出了n多条域名&#xff0c;需要获取其对应的ip地址。本文叙述了解决项目问题所使用的方法&#xff0c;且本文旨在研究js反混淆&#xff0c;请勿将所观所学用于非法操作&#xff0c;如有侵权&…

spring-bean的基础知识

1.bean的别名 2.bean的作用范围 单例多例&#xff0c;即现在创建的bean对象是一个还是多个&#xff0c;默认情况下是单例&#xff0c;可在配置文件修改 <bean scope"singleton/prototype"/> 适合单例的bean 1.表现层对象 2.业务层对象 3.数据层对象 4.工具对…

windows py项目部署到centos7上出现的问题

yolov5训练数据时&#xff0c;centos7系统无法访问github下载预训练模型方法&#xff1a;在自己的计算机中打开etc&#xff0c;找到hosts文件 将下面的命令添加到内容的末尾 # GitHub Start 140.82.113.3 github.com 140.82.114.20 gist.github.com 151.101.184.133 …

基于Java+vue前后端分离微博系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

17.待机唤醒

1.STM32待机模式介绍&#xff1a; &#xff08;1&#xff09;STM32低功耗模式介绍&#xff1a; STM32提供了3种低功耗模式&#xff0c;以达到不同层次的降低功耗的目的&#xff0c;三种模式如下所示&#xff1a; 睡眠模式(CM内核停止工作&#xff0c;外设仍在运行)&#xff…

【K8S系列】深入解析K8S监控

序言 做一件事并不难&#xff0c;难的是在于坚持。坚持一下也不难&#xff0c;难的是坚持到底。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记论点蓝色&#xff1a;用来标记论点 Kubernetes (k8s) 是一个容器编…