垃圾回收三色标记法

垃圾回收器三色标记为了切换回来继续扫描,而不是重新开始扫描

 

 

 刚开始所有对象都是白色对象,标记后成为黑色对象

 

 

 灰色就是孩子还没被找到,所有孩子都已经找到的对象标记后下次扫描就忽略他

 

 

 下一个时间片轮询回来的时候还是去灰色继续扫描

消失的两种状态 :

1.垃圾回收线程停止而业务线程继续执行的过程中,B指向D的引用失效了,所以CMS不建议老年代100%满了再gc,因为可能存在浮动垃圾,所以有参数,达到总空间的多少的时候.开始回收进程

 

 

 A->D诞生,B->D消失,问题出现 漏标 

 

 

CMS解决方案 吧A变为灰色  通过写屏障aop当发生引用就把A变灰

 

 

  

  一个线程写屏障变成灰,标记完2,1此时已经为灰,垃圾回收线程m2进来一看A为黑色,4又漏标

 

 

必须remark阶段 stw

 

 

 cms两个毛病,浮动垃圾还有remarkstw

 

 

G1:如果发生黑的指向白的,我把引用关系记录一下 ,把引用放在专门记录引用的堆栈里面 ,就是快照

 

 

 

 记录专门的引用,看有没有别的关系指向D,有的话D变灰色,没有就是垃圾  专门的堆栈记录引用关系

 

 G1不分代,分区  物理分区,逻辑分代

 

 三色算法+SATP解决了并发的问题,可以一边往里扔一边清楚,还能动态变e和o区

 

 

posted @ 2021-10-09 23:50  lamda表达式先驱  阅读(211)  评论(0)    收藏  举报