三色标记算法原理
什么是三色标记算法jvm垃圾回收期使用的,在并行标记的时候的一种算法,CMS/G1中的核心算法。把对象从逻辑上分为三种颜色,分别是黑色,灰色,白色黑色:自身和成员变量均已标记灰色:自身被标记,成员变量未被标记白色:未被标记的对象它主要用于收集器内存管理,适用于任何的垃圾收集器,也就是通用的算法。我们通过G1回收器来了解这个算法,我们都知道G1收集器分为三个步骤新生代回收过程当新生代eden区内存满
什么是三色标记算法
jvm垃圾回收期使用的,在并行标记的时候的一种算法,CMS/G1中的核心算法。
把对象从逻辑上分为三种颜色,分别是黑色,灰色,白色
黑色:自身和成员变量均已标记
灰色:自身被标记,成员变量未被标记
白色:未被标记的对象
它主要用于收集器内存管理,适用于任何的垃圾收集器,也就是通用的算法。
我们通过G1回收器来了解这个算法,我们都知道G1收集器分为三个步骤
新生代回收过程
当新生代eden区内存满的时候,G1年轻代收集器会采用并行多线程的方式清理堆内存垃圾,这时候会暂停所有用户的线程,让后新生代存活的对象会拷贝到S区或者老年代中。但是在G1中,它使用的是标记复制算法
新生代GC+并发标记过程
在新生代进行回收时,进行GCRoot初始化标记与CMS实现原理基本相同,老年代达到堆内存空间阈值时,会实现并发标记(不会stw),jvm配置参数-XX:InitiatingHeapOccupancyPercen=45%,在使用再次标记(修正的时候)的时候,G1中采用了比CMS更快的初始快照算法:snapshot一at一the一beginning (SATB)。三色标记算法,前面提到过三色一共有三个颜色,黑、灰、白。
并发标记不会触发stw
这里要注意的是:CMS中使用,漏标采用增量更新,G1中使用,漏标采用SATB
混合收集
当越来越多的对象晋升到老年代的时候,为了避免堆内存耗尽,会触发混合收集器,即Mixed GC。在此收集中,最终标记和拷贝存活,均会触发stw。
回收整个Young Region(新生代区域),部分的老年代区域,如果G1无法有足够的空间复制对象的
原创不易,完成人机校验,阅读全文