java面试中经常被问到CMS和G1垃圾收集器,故来总结下!

CMS收集器:concurrent mark and sweep,并发标记和清除,追求最少的时间停留的收集器!

CMS执行收集步骤:

1,初始标记:快速标记GC roots能直接关联到的对象,速度快;需要STW(stop the world)

2,并发标记:进行GC Roots Tracing;(时间长,但是可以和用户线程并行执行)

java面试中常问的垃圾收集器CMS和G1是什么?

3,重新标记:标记并发标记期间,用户程序继续运行而导致的标记变化(stop the world)

4,并发清除:并行执行垃圾清除,这一步也会产生浮动垃圾;(时间长,但是可以和用户线程并行执行)

优点:并发执行效率好,停顿时间短;

缺点:

1,并发清除的时候产生浮动垃圾;

2,标记-清除算法,产生大量的内存碎片,很容易引发full gc;

3,默认启用的处理线程数为(CPU的个数+3)/4,即至少使用25%的CPU,多的话会是100%;

CMS主要针对老年代的垃圾收集,通常和ParNewGC(新生代收集)一起使用;

 

java面试中常问的垃圾收集器CMS和G1是什么?

G1:将整个堆内存分为大小相等的多个独立region区,保留新生代,老年代概念,却没有做物理隔离,G1记录每个region中的对象活性,根据用户设置的停顿时间,选择活性更低的region进行回收,这样能降低停顿时间;

java面试中常问的垃圾收集器CMS和G1是什么?

G1新生代收集:新生代达到比例的时候进行收集,根据统计信息动态调整Eden和Survivor的大小,合理利用内存;

G1老年代收集:

1,初始标记:跟CMS类似

2,并发标记:跟CMS类似

3,最终标记:跟CMS类似

4,筛选回收:对所有region中的回收成本进行排序,同时根据用户设定的停顿时间来指定回收计划,并发清除对象(stop the world)

G1优点:

1,停顿时间可预测:根据用户设定的停顿时间进行stop the world和gc;

2,region的回收具有优先级:对象收集更有效率和针对性;

3,标记-整理算法:不再有内存碎片产生;