serial收集器,串行运作,作用于新生代,使用复制算法,会stop the world,有较长的停顿时间。适用于单cpu且对停顿时间无要求的场景。
serial old收集器,serial收集器的年老代版本。
ParNew收集器,并行运作,作用于新生代,使用复制算法,会stop the world。适用于多cpu的场景。
Parallel scavenge收集器,并行运作,作用于新生代,使用复制算法,会stop the world,能够通过参数开启自适应调整策略,结合虚拟机的当前运行情况调整参数以获取最大的吞吐量。适用于计算量大,且交互少的场景。
Parallel Old收集器,Parallel scavenge收集器的年老代版本,不同之处是作用于年老代,使用标记-整理算法。
CMS(concurrent mark sweep)收集器,jdk14时被删除了,特点最少停顿时间优先。
G1收集器,相对于其他收集器,G1收集器有了很大的变化。作用于新生代和年老代,使用标记-整理算法。堆被分为许多个大小相同的Region,新生代和年老代位于不同的region。堆是region的集合。G1能够预测停顿时间。
G1收集步骤:
1.初始标记(inital mark),标记GC Roots直接关联的对象,修改region 的top at mark start指针值,做一个快照,会stop the world,时间非常短。top at mark start指针用于指示可用于并发标记阶段分配新对象的空间。
2.并发标记(concurrent mark),与用户程序一同执行,从GC Roots开始进行可达性分析。并发阶段若引用关系变化可能会产生漏标问题,G1通过snapshop at the beginning(SATB)算法,将引用变化的对象生成SATB记录,推送SATB记录到GC堆栈。
3.最终标记(final mark),对SATB记录的对象进行标记,会stop the world,时间短。
4.筛选回收(live data counting and evacuation),更新region的统计数据,计算每个region的回收价值和回收停顿时间,选择在最大停顿时间限制下能回收的region。复制被选中的region中的存活对象到新的region,删除旧的region。会stop the world。