垃圾收集器是内存回收的HotPot具体实现。垃圾回收算法见GC收集算法
GC收集器 | Serial | ParNew | Parallel Scavenge | Serial Old | Parallel Old | CMS |
---|---|---|---|---|---|---|
应用内存区域 | 新生代 | 新生代 | 新生代 | 永久代 | 永久代 | 永久代 |
是否是多线程 | 否 | 是 | 是 | 否 | 是 | 是 |
诞生JDK版本 | 1.3.1之前 | 1.4.0之前 | 1.6 | 1.5 |
Serial 收集器
Serial 收集器是一个单线程收集器,在进行垃圾收集时,必须暂停其他所有工作线程(Stop the world ),直到它收集结束。
在虚拟机运行在Client模式下,它是默认的新生代收集器。
特点
Serial收集器是最基本,发展历史最悠久的收集器。
ParNew 收集器
ParNew收集器其实就是Serial收集器的多线程版。
在Server模式下虚拟机首选的新生代收集器。默认开启的线程数,和CPU的个数相同。
特点
除了Serial收集器以外,只有ParNew收集器能和CMS收集器配合使用
虚拟机参数
- -XX:SurvivorRatio
- -XX:PretenureSizeThreshold
- -XX:HandlePromotionFailure
Parallel Scavenge 收集器
Parallel Scavenge 是一个使用复制算法的新生代多线程收集器。
GC停顿时间短,响应速度快,适合提供对响应速度有要求的和用户交互的程序。
吞吐量达,则可以更高效地利用CPU时间,更快完成任务,适合后台运算的任务。
特点
Parallel Scavenge 收集器目标是达到一个可控制的吞吐量(Throughput)。
吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)
虚拟机参数
- XX:MaxGCPauseMillis 控制最大垃圾收集停顿时间(大于0的毫秒数)
- XX:GCTimeRatio 直接设置吞吐量大小 (N <100 正整数) 吞吐量=N/(N+1)
- XX:+UseAdaptiveSizePolicy 开关参数,打开后,虚拟机会根据当前系统的运行情况,动态调整JVM参数以提供合适的吞吐量
Serial Old收集器
Serial Old 是Serial 收集器的老年代版本。
特点
作为CMS收集器的后备园,在发生Concurrent Mode Failure 时使用。
和Parallel Scavenge 收集器搭配使用
Parallel Old 收集器
Paralllel Old 是Parallel Scavenge 收集器的老年代版本。
特点
新生代的Parallel Scavenge 和老年代的Parallel Old, 是吞吐量优先应用组合。
CMS收集器
CMS(Concurrent Mark Sweep)是一种以获取最短回收停顿为目标的收集器。
特点
响应速度快,适合B/S系统的服务端。