1、Serial收集器
(1)开启参数:-XX:+UseSerialGC
(2)过程
单线程的收集器,它的单线程的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,最重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。
(3)使用场景:用户桌面
2、ParNew收集器
(1)开启参数:-XX:+UseParNewGC
(2)过程:
Serial收集器的多线程版本,除了使用多线程的垃圾收集之外,其余行为包括Serial收集器可用的所有执行参数、收集算法、STW(Stop The World)、对象分配规则、回收策略等都与Serial收集器完全一样(只对新生代并行收集,对老年代依旧是单线程收集,收集过程中STW)
(3)使用场景:服务器
3、Parallel Scavenge收集器
(1)开启参数:-XX:+UseParalelGC
(2)关注点:
可控的吞吐量,吞吐量计算公式:运行用户代码时间/(运行用户代码时间+垃圾收集时间)停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验,而高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务。和ParNew的区别在于,用户可以控制GC的
Parallel Scavenge提供了两个参数用于精确控制吞吐量(用户代码执行时间/(GC时间+用户代码执行时间))
-XX:MaxGCPauselMillis //最大垃圾收集停顿时间(大于0毫秒数)
-XX:GCTimeRatio //吞吐量大小(大于0且小于100的整数,吞吐量百分比)
-XX:+UseAdaptiveSizePolicy //内存调优委托给虚拟机管理
(3)适用场景:后台计算不需要太多交互
4、ParalleOld
对老年代并行收集器的多线程版本
5、ParaNew
Serial收集器的多线程版本,其余行为和Serial收集器完全一样
6、CMS(Concurrent Mark Sweep)
(1)开启参数:-XX:+UseConcMarkSweepGC
(2)过程
CSM收集器是一种以获取最短回收停顿时间为目标的收集器,分为四步:初始标记(STW)、并发标记、重新标记(STW)、并发清除
特点:
低停顿
是基于“标记一清除”算法实现的,经过多次标记才会被清除
-XX:+UseCMSCompactAtFullCollection GC执行完后做一次整理操作(清理碎片)
-XX:+CMSFullGCsBeforeCompaction 执行多少次FullGC要做一次整理操作
(3)使用场景:互联网站或者web服务器
7、G1收集器
(1)两种GC模式(两种都是Stop The World的)
■Young GC
扫描根:GC Roots
更新RemenberSet记录回收对象的数据结构
检测RemenberSet哪些数据是从年轻代到老年代
拷贝对象:要么往幸存代,要么往老年代
清理
■Mixed GC
(2)算法特点
标记整理、复制算法
从整体来看是基于“标记一整理”算法实现的收集器,从局部(两个Region之间)上来看是基于“复制”算法实现的
(3)开启参数
(4)过程
G1算法将堆划分为若干个区域(Region),但它仍然属于分代收集器。不过,这些区域的一部分包含新生代,新生代的垃圾收集依然采用暂停所有应用线程的方式,将存活对象拷贝到老年代或者Survivor空间。老年代也分成很多区域,G1收集器通过将对象从一个区域复制到另外一个区域,完成了清理工作。这就意味着,在正常的处理过程中,G1完成了堆的压缩(至少是部分堆的压缩),这样也就不会有CMS内存碎片问题的存在了。