当前位置: 首页 > news >正文

后端-锁专题:synchronized(java对象结构、锁的类型、锁升级流程...)

文章目录

  • 对象的结构以及大小内存换算
    • java的常见数据类型以及所占字节数
    • 分析对象总共占多少字节,各项占多少字节
    • 对象头结构
  • 锁类型
  • 锁升级流程

对象的结构以及大小内存换算

java的常见数据类型以及所占字节数

String:8字节 64位

int:4字节 32 位

long:8字节 64位

short:2字节 16位

byte:1字节 8位

double:8字节 64位

float:4字节 32位

boolean:8字节 64位

char:2字节 16位

分析对象总共占多少字节,各项占多少字节

一个对象中分为对象头、实例数据、对齐填充,对象头中分为markword、类型指针、数组长度,markword在32位操作系统中占4字节而在64位操作系统中占8个字节,类型指针是8个字节但是默认会开启指针压缩所以只有4个字节,若对象中没有数组对象的话就没有这部分,如果有就看是什么数据类型的数组,最大8个字节如果是int[]则为4个字节,对齐填充将保证对象整体所占内存为为8的整数倍,实例数据若对象为空对象则这部分没有,总体算下来以64位操作系统空对象为例对象头markword8个字节+类型指针4个字节空对象没有实例数据,算下来只有12个字节,然后加上对齐填充整个空对象位16个字节。
1668672955751.png

对象头结构

对象头中分为了类型指针、mark word、对象数组等三个部分,类型指针主要指向元空间,指向该类的元数据信息等。
mark word中包含有对象的标记信息锁信息。
在这里插入图片描述

对象数组,当对象为数组对象时,对象头还需要额外一部分数据存储数组大小。

锁类型

匿名偏向锁:JVM启动后根据参数-XX:BiasedLockingStartupDelay配置的几秒后创建的对象都是匿名对象,默认是四秒,四秒后创建的对象在偏向标记位为1,此时mark word的线程id为0。
偏向锁:当有线程获取到锁后,该锁的状态为偏向锁,偏向锁标记位为1且线程id不为0
轻量级锁:自旋锁,为了减少重量级锁后的操作,设计轻量级锁,通过cas进行尝试加锁,减少重量级锁出现锁竞争后竞争线程挂起导致线程进行上下文切换。
重量级锁:当有线程尝试加锁,且当前锁为重量级锁时,该线程未能获取到锁后线程挂起,并进入系统调度队列。

锁升级流程

jvm启动后四秒对象为匿名偏向锁,当对象被某线程尝试加锁并加锁成功后升级为偏向锁,当其他线程也尝试获取该锁资源时,就会升级为轻量级锁,这时竞争的线程就会一直cas去尝试加锁。当自旋次数达到一定阈值后,升级为重量级锁。
在这里插入图片描述

相关文章:

后端-锁专题:synchronized(java对象结构、锁的类型、锁升级流程...)

文章目录 对象的结构以及大小内存换算java的常见数据类型以及所占字节数分析对象总共占多少字节,各项占多少字节对象头结构 锁类型锁升级流程 对象的结构以及大小内存换算 java的常见数据类型以及所占字节数 String:8字节 64位 int:4字节 …...

vscode在运行c语言时,无法scanf输入

问题: 在学习c语言中,我在使用scanf和cin时无法在终端进行输入(运行了但是无法输入),在网上寻找答案,并写下笔记 解决方法 选择左上角 文件->首选项(preferences)->设置(settings&#xf…...

ROLLUP 的几点说明(十七)

ROLLUP 最根本的作用是提高某些查询的查询效率(无论是通过聚合来减少数据量,还是修改列顺序以匹配前缀索引)。因此 ROLLUP 的含义已经超出了“上卷”的范围。这也是为什么在源代码中,将其命名为 Materialized Index(物…...

项目经理面试题持续更新

1.项目中常用的文档有哪些? 1、可行性报告 可行性报告的目的是调查和展示任务要求,并确定项目是否值得和可行。可行性由五个主要因素验证——技术和系统、成本、法律、运营和进度。次要可行性因素包括市场、资源和文化因素。 2、项目章程 项目章程是证明…...

基于JavaWeb+SSM+Vue校园水电费管理小程序系统的设计和实现

基于JavaWebSSMVue校园水电费管理小程序系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 III Abstract 1 1 系统概述 2 1.1 概述 2 1.2课题意义 3 1.3 主要内容 3…...

主从复制读写分离?

主从复制和读写分离是常见的数据库架构策略,它们可以提高系统的性能和可靠性。下面是一个简单的实现方法: 主从复制: 配置主数据库:在主数据库上启用二进制日志(binary log),用于记录所有修改数…...

h5小游戏-盖楼游戏

盖楼游戏 一个基于JavaScrtipt、Html5 的盖楼游戏 效果预览 点我下载源代码 Game Rule 游戏规则 以下为默认游戏规则,也可参照下节自定义游戏参数 每局游戏生命值为3,掉落一块楼层生命值减1,掉落3块后游戏结束,单局游戏无时间限…...

量子计算的发展

目录 一、量子力学的发展历程二、量子计算的发展历程三、量子计算机的发展历程四、量子信息科学的发展 一、量子力学的发展历程 量子力学是现代物理学的一个基本分支,它的发展始于20世纪初。以下是量子力学发展的几个重要阶段: 普朗克(1900&…...

YOLOv3老矣尚能战否?基于YOLOv3开发构建建钢铁产业产品智能自动化检测识别系统,我们来与YOLOv5进行全方位对比评测

钢铁产业产品智能自动化检测识别相关的项目在我们前面的博文中已经有了相应的实践了,感兴趣的话可以自行移步阅读即可:《python基于DETR(DEtection TRansformer)开发构建钢铁产业产品智能自动化检测识别系统》 《AI助力钢铁产业数字化,pytho…...

【lodash】 关于Some的相关用法

1. 判断集合某个字段是否存在小于0 的 使用 lodash 库的 some 函数可以用来判断集合中某个字段是否存在小于 0 的值。你可以使用以下代码实现: const _ require(lodash);const collection [{ id: 1, value: 10 },{ id: 2, value: -5 },{ id: 3, value: 20 }, ];…...

JavaScript基础—引入方式、注释和结束符、输入和输出、变量、常量、数据类型、检测数据类型、类型转换、综合案例—用户订单信息

版本说明 当前版本号[20231123]。 版本修改说明20231123初版 目录 文章目录 版本说明目录JavaScript 基础 - 第1天介绍引入方式内部方式外部形式 注释和结束符单行注释多行注释 结束符输入和输出输出输入 变量声明赋值变量初始化更新变量 关键字变量名命名规则 常量数据类型…...

替换jar文件中的jar文件中的class

文件格式 testjar.jar在ruoyi.jar中。 AssetServiceImpl.class在testjar.jar 查找testjar.jar路径 jar -tvf ruoyi.jar | grep testjar.jar 解析testjar.jar jar -xvf ruoyi.jar BOOT-INF/lib/testjar.jar 查找class文件路径 jar -tvf testjar.jar | grep AssetServiceImp…...

基于51单片机倾角MPU6050老人跌倒远程GSM短信报警器+源程序

一、系统方案 1、本设计采用这51单片机作为主控器。 2、MPU6050角度值送到液晶1602显示。 3、红外传感器检测心率。 4、跌倒远程GSM报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void LCD_Init() //初始化液晶时间显示 { write_com…...

代码规范有用吗?听听100W年薪谷歌大佬怎么说!

谷歌内部的 python 代码规范 熟悉 python 一般都会努力遵循 pep8 规范,也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言,而是让大家遵守同一套规则,节省其他人阅读代码的成本,方便协作…...

最详细的软件测试面试题整理与分析

前言 时光荏苒,一转眼到了2023年末尾,2024年也快要来了,人员就业市场以往的寒冬也貌似有了转暖的迹象,身边大批的就业人员也开始了紧张的备战之中。 近几周也和多家合作公司的HR进行了沟通,发现虽然岗位就业情况较去年…...

【Vue】浏览器安装vue插件

首先看一下安装之后的效果&#xff0c;再考虑一下要不要安装 安装完之后&#xff0c;打开浏览器控制台&#xff08;ctrl shift j) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</t…...

人人都会Blazor —— 3.3 参数

参数最常见的使用,目的是使组件可以接收动态数据。 声明参数 参数使用 [Parameter] 特性的公共 C# 属性进行定义。 在下面的示例中,内置引用类型 (System.String) 和用户定义的引用类型 (PanelBody) 作为组件参数进行传递。 PanelBody.cs: public class PanelBody {publ…...

【数据结构初阶】栈和队列

栈和队列 1.栈1.1栈的概念和结构1.2栈的实现 2.队列2.1队列的概念和结构2.2队列的实现 1.栈 1.1栈的概念和结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。…...

MATLAB - text的两种使用方法

text小技巧 1. 常规使用&#xff08;Method 1&#xff09;2. 在显示画面的相对位置&#xff08;Method 2&#xff09;3. 举个例子 1. 常规使用&#xff08;Method 1&#xff09; text(x,y,txt)2. 在显示画面的相对位置&#xff08;Method 2&#xff09; text(string,‘ABC’,…...

ubuntu下配置qtcreator交叉编译环境

文章目录 安装交叉编译工具安装qt creator开发环境配置交叉编译示例demo参考 安装交叉编译工具 安装qt creator开发环境 1 官网 2 填写信息 3 下载 默认没有出现Qt5.15版本 WISONIC\80081001ub16-1001:~$ /opt/Qt/Tools/QtCreator/bin/qtcreator /opt/Qt/Tools/QtCreat…...

PlantDoc数据集:植物病害检测的完整指南与实战应用

PlantDoc数据集&#xff1a;植物病害检测的完整指南与实战应用 【免费下载链接】PlantDoc-Dataset Dataset used in "PlantDoc: A Dataset for Visual Plant Disease Detection" accepted in CODS-COMAD 2020 项目地址: https://gitcode.com/gh_mirrors/pl/PlantDo…...

别再乱改注册表了!Windows锁屏时间设置,用组策略和本地安全策略更稳(附优先级详解)

Windows锁屏策略全解析&#xff1a;从注册表到组策略的最佳实践 1. 锁屏策略的三大配置路径 在Windows系统中&#xff0c;控制自动锁屏行为的配置方式主要有三种&#xff1a;注册表编辑、本地组策略和本地安全策略。每种方法都有其独特的作用机制和适用场景&#xff0c;理解它们…...

AI模型热加载+沙箱冷启动<800ms:高并发生产环境Docker隔离性能压测实录(含12项基准数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI模型热加载沙箱冷启动&#xff1c;800ms&#xff1a;高并发生产环境Docker隔离性能压测实录&#xff08;含12项基准数据&#xff09; 在千万级QPS的实时推理网关中&#xff0c;模型热加载与沙箱冷启…...

别再只画ROC曲线了!用R语言pROC包实战DeLong检验,比较多个AUC差异

超越ROC曲线&#xff1a;用R语言pROC包实现DeLong检验的完整指南 在医学诊断和机器学习模型评估中&#xff0c;ROC曲线和AUC值已经成为衡量分类器性能的金标准。但当我们面对多个模型时&#xff0c;仅仅比较AUC的点估计值往往不够严谨——就像比较两个药物的疗效时&#xff0c;…...

VetClaw开源兽医诊所管理系统:微服务架构部署与核心模块实战指南

1. 项目概述&#xff1a;一个为兽医诊所量身定制的开源管理利器 如果你在经营一家兽医诊所&#xff0c;或者参与过诊所的日常运营&#xff0c;你大概率会和我有同样的感受&#xff1a;市面上那些通用的客户关系管理&#xff08;CRM&#xff09;或企业资源规划&#xff08;ERP&a…...

如何为你的ESP32 AI助手添加“眼睛“:xiaozhi-esp32摄像头集成终极指南

如何为你的ESP32 AI助手添加"眼睛"&#xff1a;xiaozhi-esp32摄像头集成终极指南 【免费下载链接】xiaozhi-esp32 An MCP-based chatbot | 一个基于MCP的聊天机器人 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 想象一下&#xff0c;你…...

【仅限首批200名工程师开放】:获取NASA JPL认证的C语言形式化验证Checklist V3.2(含17类实时系统边界条件断言模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NASA JPL认证C语言形式化验证Checklist V3.2的工程价值与适用边界 核心定位与权威性来源 NASA喷气推进实验室&#xff08;JPL&#xff09;发布的C语言形式化验证Checklist V3.2并非通用编码规范&#…...

动态加载JavaScript小部件的正确姿势

在现代网页开发中&#xff0c;动态加载JavaScript小部件是非常常见的需求&#xff0c;特别是在需要根据用户行为或URL参数来定制小部件内容时。今天我们来探讨一下如何正确地实现这一点。 背景介绍 假设我们有一个小部件&#xff0c;它可以通过特定的参数&#xff08;如clientI…...

如何彻底解决微信QQ消息撤回难题:Windows平台防撤回与多开终极指南

如何彻底解决微信QQ消息撤回难题&#xff1a;Windows平台防撤回与多开终极指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https:…...

HFSS 2020 保姆级教程:从零开始,用T型波导实例搞定模式驱动求解与S参数分析

HFSS 2020 实战指南&#xff1a;T型波导建模与电磁仿真全流程解析 第一次打开HFSS时&#xff0c;面对密密麻麻的菜单和复杂的参数设置&#xff0c;很多初学者都会感到无从下手。作为一款专业的电磁场仿真软件&#xff0c;HFSS在微波器件设计、天线分析等领域有着广泛应用&#…...