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

【Java并发】聊聊对象内存布局和syn锁升级过程

对象存储解析:一个空Object对象到底占据多少内存?

对象内存布局

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Mark Word占用8字节,类型指针占用8个字节,对象头占用16个字节。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,我们来看一下一个Object对占用多少空间,
在这里插入图片描述
因为java默认是开启压缩的。
在这里插入图片描述
所以在类开启压缩的时候,会自动填充4字节,所以就是16字节,而没有开启类压缩的 也是16字节。

syn锁升级

在这里插入图片描述
synchronized锁:由对象头中的Mark Word根据锁标志位的不同而被复用及锁升级策略
在jdk5中使用的是重量级锁,用户态和内核态有切换。
在这里插入图片描述
为了提升性能,引入了偏向锁和轻量级锁。其实就是性能和数据安全性的一种权衡。
在这里插入图片描述
在这里插入图片描述

无锁

        Object obj = new Object();System.out.println(Integer.toHexString(obj.hashCode()));System.out.println(ClassLayout.parseInstance(obj).toPrintable());

在这里插入图片描述

偏向锁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入代码片在这里插入图片描述
在这里插入图片描述

        Object obj = new Object();new Thread(()->{synchronized (obj) {System.out.println(ClassLayout.parseInstance(obj).toPrintable());}}).start();

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

轻量级锁

在这里插入图片描述
在这里插入图片描述

重量级锁

多个线程进行欠账资源的时候,就会将锁升级到重量级锁。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/147002.html

相关文章:

  • 【档案专题】八、电子档案鉴定与销毁
  • 进程与子进程
  • 如何对MySQL和MariaDB中的查询和表进行优化-提升查询效率
  • 【Android】关于binder_calls_stats服务
  • 给前端返回http链接,由于浏览器缓存不能获取到最新资源怎么办?
  • 【Java Web】检查用户登录状态,防止用户访问到非法页面
  • 数学建模——校园供水系统智能管理
  • 分布式集群——搭建Hadoop环境以及相关的Hadoop介绍
  • Python的os.walk()函数使用案例
  • 学习JAVA打卡第四十五天
  • 创建K8s pod Webhook
  • 抓包-要抓取Spring Boot应用程序的请求
  • jmeter+nmon+crontab简单的执行接口定时压测
  • ZooKeeper基础命令和Java客户端操作
  • 【数据分享】2000-2020年全球人类足迹数据(无需转发\免费获取)
  • 基于机器学习的fNIRS信号质量控制方法
  • 分布式锁的三种实现方式是什么?
  • 华为云软件精英实战营——感受软件改变世界,享受Coding乐趣
  • 贪心算法总结篇
  • ICCV 2023 | 港中文MMLab: 多帧光流估计模型VideoFlow,首次实现亚像素级别误差
  • 【python爬虫】—图片爬取
  • 自动化运维工具—Ansible
  • uniapp 安卓平台签名证书(.keystore)生成
  • 缓存中间件Redis常考知识点
  • detour编译问题及导入visual studio
  • 江西武功山旅游攻略(周末两日游)
  • Django静态文件媒体文件文件上传
  • mysql 分库分表实现思路
  • Android深思如何防止快速点击
  • PHP自己的框架cookie()使用(完善篇七)