2020-10-24 随笔:什么是CAS,Object object = new Object(); 这样创建对象在系统内存中如何布局的

为了面试做准备,最近复习了一下CAS,原理和ABA问题。

什么是CAS

CAS简单来说就是 比较并交换
是用户态操作(操作系统可以分为 用户态,内核态两个区。)
Cpu支持cas,一般现在的cpu都是多核的。
cas 在java 中的提现:Java中unsafe方法调用底层c++实现。c++ 中的unsafe 方法,c++ 可以调用操作系统底层。解释一下cas就是为了不惊动操作系统的重量级锁,也就是锁总线。来实现锁的机制。cpu从内存中读到值然后经过计算,在回写到内存中,这时候的方法就是判断读到的值跟不跟现在的一样,也就是所谓的比较一下。如果一样就修改内存中的值为cpu计算过的值。ABA 就是这个内存中的值可能改变过但是又变回原来的值。这时候就需要加一个版本号来判断就可以了。不知道这样解释你明白了吗?
AbA问题用版本号解决

对象布局
1.Mark word 三个作用  记录锁信息,记录gc信息,记录hashcode也就是identify hashcode
2.记录对象信息,对象指针
3.记录成员变量
4.对象对齐,字节码要被8整除才可以高效

锁升级的过程:下面是个人的愚钝认识

偏向锁,因为多数情况锁只会被一个线程占用,所以很少有竞争。没有锁竞争,所以给贴的偏向锁。贴的过程是cas操作。第一个线程持有偏向锁,第一个线程的指针给贴上去就是偏向锁。90%的时间就一个线程,如果设计个竞争的锁很是浪费时间跟资源。
00 01 10 11状态  这些都是markword中的锁标志位,可以用jcl打印到控制台,01标志位分两种,001跟101。001是无锁态,101就是偏向锁。00是无锁,或者叫轻量级锁(自旋锁
偏向锁有很多规则。
如果有线程竞争了就会升级为轻量级锁,或者叫自旋锁,有的也管这个无锁。所谓的无锁就是没有跟操作系统申请重量级锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用提供的代码,可以使用toUnixTimestamp函数将日期对象转换为Unix时间戳。根据引用的说明,刷新间隔时间是指从服务器检查域数据文件是否需要更新的时间间隔。根据引用的示例,可以将域数据文件复制到指定的目录下。根据您提供的时间戳"2023-09-03T08:38:43.548 00:00",您可以使用toUnixTimestamp函数将其转换为Unix时间戳。请注意,时间戳应该是一个数字,表示从Unix纪元(1970年1月1日)开始的秒数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [to-unix-timestamp:将日期转换为Unix时间戳](https://download.csdn.net/download/weixin_42160425/18164877)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux随笔16-主从DNS服务搭建以及智能DNS服务搭建、基于CentOS7.6编译安装MySQL-5.7.32](https://blog.csdn.net/ikkyphoenix/article/details/118445272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值