如果说垃圾回收算法是内存回收的方法论,那么垃圾收集器就是算法的具体实现。
这里讨论jdk1.7Update14之后Hotspot的收集器。
这个虚拟机包含的收集器如下图所示:
1、Serial收集器
它是一个新生代的单线程收集器,之所以叫单线程是因为,它不仅只使用一个CPU一个线程,而且在它进行垃圾回收的时候必须暂停其他所有线程,指定它回收结束。
2、ParNew收集器
它是Serial收集器的多线程版本,其他基本没差别。
3、Parallel Scavenge收集器
和ParNew相似,区别在于它的关注点在达到一个可控制的吞吐量。
提供了几个参数:-XX:MaxGCPauseMillis,控制最大垃圾收集停顿时间、-XX:GCTimeRatio,设置吞吐量大小、-XX:+UseAdaptiveSizePolicy,动态地自动设置新生代大小,比例等等参数。
4、Serial Old收集器
Serial收集器的老年代版本。使用标记整理方法。
5.Parallel Old收集器
Parallel Scavenge收集器的老年版本。
6、CMS收集器
以获得最短停顿时间为目的的收集器,在Web项目中,对响应尤其在意,CMS就比较符合。
CMS基于标记清楚算法实现,整个过程分为四个步骤:
初始标记,并发标记,重新标记,并发清除。
其中初始标记和重新标记任然需要暂停其他所有线程。
其中最耗时的并发标记和并发清能和其他线程一起运行。
7、G1收集器
特点:并行并发,分代收集,空间整合,可预测的停顿
步骤:初始标记,并发标记,最终标记,筛选回收