垃圾回收:
新生代:采用标记-复制 回收策略,(serial,parnew,paraller scavage)
searial: 单线程,串行化垃圾回收,效率相对较低,STW时间会相对较长,适合项目比较小,对象比较少的
parNew:多线程垃圾回收,是serial的多线程版本,效率有很大提升,STW时间较少(和CMS组合使用)
paralle scavage: 和parnew一样也是多线程版本,但是会根据吞吐量来调整收集策略
老年代:采用标记整理或标记清除(CMS),serial old, paraller old(和paraller scavage组合使用)
CMS: 标记-整理 算法
1、首先标记所有GC-ROOTS对象能直接引用的对象,此过程需要STW,但是速度很快
2、并发标记 可以到达的对象 (此过程可以和用户线程一起工作,因为一起工作,可能导致使用过程发生改变)
3、重新标记,(防止漏标,防止上述并发标记导致对象状态改变而产生的漏标对象)
4、并发垃圾回收(对未标记到的对象进行垃圾回收,与用户线程并发执行,这个阶段所有新增对象都是标记为黑色)
优点:
并发表计,低停顿
缺点:
占用系统资源,和用户线程抢资源,内存碎片比较多
三色标记:
黑色标识该对象的所有引用都被扫描到,
灰色标志该对象至少还有一个引用未被扫描到
白色标志该对象还没被扫描到