1、CMS收集器
CMS收集器是一种以获取最短回收停顿时间为目标的收集器。基于“标记清除算法”实现。其运作方式如下:
1、初始标记
2、并发标记
3、重新标记
4、并发清除
初始标记仅仅只是标记一下GC Roots能直接关联到的对象,并发标记阶段就是根据初始标记进行GC Roots Tracing找出要清除对象,而重新标记阶段则是为了修正并发标记期间因用户程序继续运作而导致标记产生表动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长点,但远比并发标记的时间短。
CMS:并发收集,低停顿
缺点:
1、对CPU资源敏感,并发阶段,会降低CPU吞吐量,也就是消耗CPU。
2、CMS无法处理浮动垃圾,可能会出现“Concurrent Mode Failure(并发模式故障)”失败而导致Full GC产生。
3、CMS是一款“标记清除算法”实现的收集器,自然也就容易产生大量空间碎片。
浮动垃圾:由于CMS并发清除阶段用户线程在运行,伴随程序运行自然就会产生新的垃圾,这部分垃圾出现在标记过程后面,无法被回收。只有等待下一次收集。
2、G1收集器
G1收集器是目前垃圾收集器理论发展最前沿成果,相比CMS收集器,G1收集器两个最突出的改进是:
1、基于标记–整理算法,不产生内存碎片
2、可以非常精准控制停顿时间,在不牺牲吞吐量的前提下,实现低停顿垃圾回收。
G1收集器避免全区域垃圾收集,吧堆内存划分为大小固定的几个独立区域,并且跟踪这些区域的垃圾收集进度,同时在后台维护一个优先级列表,每次根据允许的收集时间,优先回收垃圾最多的区域。区域划分和优先级区域回收机制,确保了G1收集器的高效回收垃圾。