- 博客(6)
- 收藏
- 关注
原创 CAS自旋锁
此时内存中的m=4 ,程序读取m后做m++操作,此时m变成了5。CAS比较和交换,此时比较期望的旧数据与内存的数据是否相等,相等,交换内存中的数据,将内存中的数据设置为5,如果此时不相等,说明在我执行m++的过程中,内存中的数据被修改过,重新拉取内存中的数据,重复执行CAS自旋。我们看上图的右半部分,在我左边的程序执行m++的过程中,我右边的程序同样在操作内存中的m,首先将m改成3,然后将m改成5,最后再将m改成4,右边操作做完了之后,左边的程序此时CAS比较期望的旧数据与内存中的数据,m都是等于4。
2023-02-09 15:44:01
160
原创 总线锁与缓存锁
Shared:共享,当前缓存行与主存数据一致,该数据在其他CPU中也存在,不能随意修改,需要先广播通知其他CPU,将其他CPU中的数据标记为Invalid失效状态,才能修改。Exclusive:独享,当前缓存行与主存数据一致,该数据只存在一个CPU中,可以自由读写,而不需要通知其他CPU。Modified:修改,当前缓存行的数据已被修改,但是没有被写回到主存中。Invalid:失效,当前缓存行数据已失效。
2023-02-09 15:08:54
729
原创 JVM 三色标记
当黑色A指向白色D的时候,并且灰色B指向白色D的引用消失的时候,就会存在漏标的现象。因为此时A是黑色的,不会再扫描了,扫描灰色B的时候找不到白色D,导致D对象扫描不到,从而产生漏标。Rset表存储其他Region区域对象到本对象的引用信息,是的垃圾收集器不需要扫描整个堆内存就能找到垃圾,只需要扫描Rset表即可。当A引用指向其他对象时,将A重新标记为灰色,下次扫描时,重新扫描A的成员遍历。当B-> D的引用消失时,将D推送到GC堆栈,保证还能被GC扫描到。灰色:自身被标记,但是成员变量还没完全被标记。
2023-02-02 16:24:11
218
1
原创 JVM 垃圾收集器
Serival:年轻代,单线程GC清理,存在STW问题(stop the world)其他线程等待GC的清理。4、并发清理(Concurrent Sweep):执行业务线程同时清理标记的GC,这个过程会产生垃圾--浮动垃圾。1、初始标记(InitialMark):单线程标记,标记GC Root直接相关联的对象,存在STW。3、重新标记(Remark):步骤二会产生新的GC,Remark暂停业务线程,标记GC,存在STW。ServivalOld:老年代,单线程GC清理,存在STW问题,采用标记压缩算法。
2023-02-02 15:24:55
113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人