1. Serial 收集器

    Serial 是一个新生代收集器 ;单线程垃圾回收器,采用复制算法 

    -XX:+UseSerialGC

  2. ParNew 收集器

    ParNew 是一个新生代收集器;ParNew收集器其实是Serial收集器的多线程版本,其余行为包括Serial收集器可用的所有控制参数、收集算法、stop the world、对象分配规则,回收策略等都与Serial收集器完全一样;

    控制参数有如下:

    -XX:+UseParNewGC

    -XX:SurvivorRatio //新生代中Edge区域Survivor区的容量比值,默认为8,代表 Edge:Survivor = 8:1

    -XX:PretenureSizeThreshold //直接晋升到老年代对象的大小,设置这个参数数大于这个参数的对象直接在老年代分配

    -XX:HandlePromotionFailure //是否允许新生代收集担保,进行一次minor GC后,另一块Survivor空间不足时,将直接会在老年代中保留

    -XX:ParallelGCThreads //设置并行GC进行回收时,并行线程数

  3. Parallel Scavenge 收集器

    Parallel Scavenge 是一个新生代收集器,也是使用复制算法的收集器,从名字上看 Parallel Scavenge收集器,与ParNew收集器一样,都是并行收集,并且都采用复制算法,但是Parallel Scavenge收集器与CMS等其它收集器不同,CMS等收集器关注的点是尽量缩短垃圾回收时用户线程停顿的时间,而Parallel Scavenge收集器目标则是达到一个可控的吞吐量(Throughput)。所谓吞吐量就是CPU用户运行用户代码的时间与CPU总耗时间的比值。

    停顿时间短就适合人机交互程序,而高吞吐量可以高效的利用CPU时间,尽可能快的完成用户任务,适合后台预算而不需要太多交互的的任务。

    Parallel Scanvenge 手机器两个参数可以精准的控制吞吐量:

    -XX:MaxGCPauseMillis //最大垃圾回收停顿时间 大于0的毫秒数,收集器尽可能的保证内存回收花费的值不超过该设定

    -XX:GCTimeRatio //设置大于0小于100的整数,垃圾回收时间占总时间的比率,如果把该值设为19 允许GC时间占总时间的5% 1/(1+19),默认值为 99 ,就是允许最大1%

    -XX:+UseAdaptiveSizePolicy //打开开关不用指定新生代老年代大小等参数,收集器会动态指定空间大小

  4. Serial Old 收集器

    Serial Old 是Serial收集器的老年代版本,他同样是一个单线程收集器,使用“标记-整理”算法;

  5. Parallel Old 收集器

    Parallel Old收集器 是Parallel Scavenge 收集器的老年代版本,使用多线程和“标记-整理”算法,Parallel Old收集算法是在jdk 1.6之后的版本才提供的,在此之前Parallel Scavenge 收集器地位比较尴尬,因为如果新生代选择了 Parallel Scanvenge收集器,老年代除了Serial Old(PS MarkSweep)收集器别无选择;由于老年代在Serial Old收集器在服务器性能上拖累,使用Parallel Scanvenge收集器整体上也未必能达到吞吐量最优;知道Parallel Old收集器出现后,“吞吐量优先”收集器终于有了比较名副其实的应用组合,在注重CPU吞吐量的应用场合,都可以优先考虑Parallel Scanvenge 加Parallel Old 收集器;

  6. CMS 收集器

    CMS(Concurrent Mark Sweep) 收集器是一种以获得最短回收停顿时间为目标的收集器。目前很大一部分的java应用集中在互联网站或者B/S系统的服务端,这类应用尤其重视相应速度;

    从名字Mark Sweeps上可以看出CMS收集器是基于“标记-清理”算法实现的,他的运作过程先对与其他几种收集器来说相对复杂,整个过程分为四步:

    1)初始标记(CMS inital mark)  stop the world 标记GC Roots直接关联到的对象

    2)并发标记(CMS concurrent mark) GC Roots tracing

    3)重新标记(CMS remark) stop the world 修正2)步骤与用户线程冲突的部分

    4)并发清除(CMS cuncurent sweep)清除不可达对象

    CMS 收集器启动时的回收线程默认是(cpu数量+1)/4 并发垃圾手机线程不少于 25%的CPU资源

  7. G1 收集器

    G1(Garbage-First)收集器是当今收集器技术发展的最前沿成果之一;G1的使命的替换掉CMS收集器

    G1特点:

    1)并行与并发

    2)分代收集

    3)空间整合

    4)可预测的停顿

    G1收集器工作的顺序与CMS收集器顺序非常相似,两者主要差别在于内存划分模型,以及回收算法