java 垃圾收集算法分为 标记-复制,标记-清除,标记-整理三种算法。
java 垃圾收集器共分为 series收集器,parallel收集器,parNew收集器,CMS收集器,G1收集器。
其中 series收集器是单线程的收集器,他在做GC的时候,会STW(stop the world)
parallel收集器,和series的垃圾收集算法类似,只是parallel可以采用多线程进行垃圾收集,但是同样在做垃圾收集的时候也会STW 。
CMS在做GC的时候,在初始标记的时候回STW,不过是很短暂的时间,在并发标记的时候,是可以和用户的应用线程同时工作的,整个GC的过程会比series和parallel的GC过程长,但是用户基本感知不到STW的过程,在并发标记的过程中用到的三色标记算法,三色标记算法值,把内存中的对象用三种颜色来进行区分,对象中所有元素都已经标记过的用黑色来表示,被黑色的对象所应用的用灰色来表示,没有被标记的用白色来标记,在并发标记的过程中防止漏标,底层分别采用的 写前屏障+增量更新
增量更新,也是在赋值操作之前把对应的关系放在一个队列之中,队列主要是用来异步解耦的,在重新标记的过程中,用队列里面的存储的应用关系来找到其所对应的GC Root,并把GC Root由黑置灰再次标记,次动作实在重新标记的过程中进行的,初始标记和重新标记都会STW,所以队列之中的关系不会再发生改变。