CAS与锁的相关底层知识一

一、什么是CAS

1、概念

2、原理:

用到汇编指令:lock cmpxchg ,其中cmpxchg分为比较和替换两步,不是原子的,所以用lock保证原子性

lock会将某个内存地址上锁,不让其他cpu访问

 

2、ABA问题:用版本号去解决

二、JUC包-java.util.concurrent

 

三、用户态、内核态

使用synchronize获取锁需要经过用户态转化为内核态,返回锁是又从内核态转化为用户态

 

四、对象的内存布局

new出来的对象在内存中是怎么分布的?这个跟虚拟机实现有关,不同虚拟机的布局不同,我们只关心hospot的实现。

对象字节数必须是8的整数倍,所以对齐填充就是为了保证对象大小是8的整数倍的。

 

那么markwork中包含了哪些信息呢?我们只关心64位的哈,如下图:

 

五、可重入锁

可重入次数要记录下来,因为有几次重入就要进行几次解锁

偏向锁:记录在线程栈里,每加一次锁就往线程栈中压入一个LR

 

六、自旋锁位什么要升级为重量级锁

原因是,少量线程(一般是cup核数的一半)自旋没问题,但是大量线程自旋就会浪费cup资源了

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值