JAVA知识点:
(承接synchronized的实现原理) 对象存储:
OOP-Klass 模型 去描述Java对象的实例,OOP表示普通对象指针;Klass表示描述 对象实例 的具体逻辑
HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)
(掌握)对象头:如果对象是数组类型,则JVM用3个字存储对象头;否则,使用2个字
Mark Word对象头相关文章:https://www.jianshu.com/p/ff6591b26da5、https://www.jianshu.com/p/3d38cba67f8b
(了解)CAS:全称Compare and swap,字面意思:”比较并交换“,一个 CAS 涉及到以下操作:
````
我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。
1、比较 A 与 V 是否相等。(比较)
2、如果比较相等,将 B 写入 V。(交换)
3、返回操作是否成功。
````
当多个线程同时对某个资源进行CAS操作,只能有一个线程操作成功,但是并不会阻塞其他线程,其他线程只会收到操作失败的信号。可见 CAS 其实是一个乐观锁。
(了解)归纳CAS的应用场景:
1、CAS 的使用能够避免线程的阻塞。
2、多数情况下我们使用的是 while true 直到成功为止。
(了解)CAS 缺点:
1、ABA 的问题,就是一个值从A变成了B又变成了A,使用CAS操作不能发现这个值发生变化了,处理方式是可以使用携带类似时间戳的版本AtomicStampedReference
2、性能问题,我们使用时大部分时间使用的是 while true 方式对数据的修改,直到成功为止。优势就是相应极快,但当线程数不停增加时,性能下降明显,因为每个线程都需要执行,占用CPU时间。
网友评论