垃圾收集器:若是说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现。java
##Serial收集器:是虚拟机新生代收集的惟一选择。单线程的收集器他,它在进行垃圾收集时,必须暂停其余全部的工做线程,直到它收集结束。简单而高效。Serial收集器对于运行在Client模式下的虚拟机来讲是一个很好的选择。
##ParNew收集器:就是Serial收集器的多线程版本。除了使用多条线程进行垃圾收集以外,基本彻底同样。但它倒是许运行在Server模式下的虚拟机中首选的新生代收集器,只有它能够与CMS收集器配合工做。
##Parallel Scavenger收集器:是新生代收集器,复制算法的收集器,并行的多线程收集器,目标则是达到一个可控的吞吐量,所谓的吞吐量就是CPU用于运行用户代码的时间与CPU总耗时间的比值。高吞吐量则能够最高效率的利用CPU时间,尽快的完成程序的运算任务,主要适合在后台运算而不须要太多交互的任务。
Serial Old收集器:老年代,单线程收集器,使用标记整理算法。也是被Client模式下的虚拟机使用。
Parallel Old收集器:是Parallel Scavenge收集器的老年版本,使用多线程“标记整理”算法。"吞吐量优先",在注重吞吐量及CPU资源敏感的场合,均可以优先考虑Parallel Scavenge加Parallel Old收集器。
CMS收集器:是一种以获取最短回收停顿时间为目标的收集器,基于"标记清除",比较符合--重视服务的响应速度,但愿系统停顿时间最短,给永不带来较好的体验。四步:初始标记,并发标记,从新标记,并发清除--初始标记和从新标记仍然须要“Stop The Word”,初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC Roots Tracing 的过程,而从新标记阶段则是为了,修正并发标记期间,因用户程序继续运做而致使的标记产生变更的那一部分对象标记记录,这个阶段的停顿时间通常比初始换标记阶段稍长一些,但远比并发标记的时间短。**并发收集,低停顿,CMS收集器对CPU资源很是敏感。默认启动的回收线程数(CPU数量+3)/4。
I-CMS:增量式并发收集器,就是在并发标记和并发清理的时候让GC线程,用户线程交替运行,尽可能减小GC线程的独占资源的时间,这样整个垃圾收集的过程会更长,可是对用户的影响就会明显少一些。
CMS 收集器没法处理浮动垃圾,可能出现。
G1收集器:一是G1收集器是基于“标记整理算”算法实现的收集器,不会产生空间碎片,二是它能够很是精准地控制停顿,即能让使用者明确在一个长度为M毫秒的时间片断内,消耗在垃圾收集上的时间不得超过N毫秒,这几乎已是实时java(RTSJ)的垃圾收集器的特征了。G1将整个Java堆(包括新生代,老年代)划分为多个大小固定的独立区域(Region),而且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据容许的收集时间,优先回收垃圾最多的区域(这就是Garbage First名称由来)算法
部分参数:多线程