垃圾回收器是内存回收的具体实现,主要包含以下几种:
1、Serial收集器(新生代) SerialOld收集器(老年代)
是最基础也是时间最久的一款收集器。单线程进行工作,当此回收器回收时候,必须暂停其他线程 ,直到该线程工作结束,“Stop The Word”由虚拟机在后台用户不可见的方式,进行停止其他线程。导致用户使用时候出现卡顿, 其优点是简单高效。目前已经很少使用,单CPU下建议使用
2、ParNew收集器(年轻代)
本质是Serial收集器的多线程版本,并行多个线程进行回收垃圾,是目前在Server模式下首选的,重要的是可以与CMS收集器进行配合回收。默认开启线程与CPU数量相同,多CPU下建议使用
设置线程数量 -XX:parallelGCThreads
3、Parallel Scavenge收集器(年轻代)ParallelOld收集器(老年代)
采用复制算法的收集器,也时候一款并行多线程的回收器。与其它收集器不同的是,其他收集器关注的尽可能缩短用户线程停顿时间。而这两款收集器目标是达到一个可控的吞吐量,也被称为吞吐量优先收集器,这两款最适合进行搭配使用效率高
停顿时间短的适合与用户交互的程序,吞吐量高的适合运算多交互不多的任务
Parallel Scavenge收集器可以进行以下设置
设置停顿时间 -XX:MaxGCPauseMillis 范围大于0的毫秒数
设置吞吐量 -XX:GCTimeRatio 范围0-100的整数
设置GC自适应 -XX:GCTimeRatio 开启后无需配置新生代大小及晋升老年代分配等参数
4、CMS收集器
以获取最短停顿时间为目标的回收器,是目前使用较多的一种。提高响应速度,用户体验感好。
采用“标记-清除”算法实现
其中初始标记与重新标记,需要“Stop The Word”,初始标记仅标记GCROOT相关速度比较快。重新标记为了修正并发标记期间、程序继续运作导致标记产生变动的一部分对象,速度想到会慢一点。是一款并发收集、低停顿的收集器。CMS虽然不会导致系统停顿,但是会影响CPU负载,默认是(CPU数量+3)/4,占用25%的CPU,如果CPU不足会出现系统慢、吞吐量低的情况。