垃圾收集器
- 串行收集器 Serial开头的
- Serial
- Serial Old(MSC)
- 并行收集器 Parallel开头的
- ParNew
- Parallel Scavenge
- Parallel Old
- 并发收集器
- CMS (Concurrent Mark Sweep)
- G1(Garbage First)
- 图片中的问号位置
- JDK 1.7后有G1
GC算法是内存回收的方法论,GC收集器是内存回收的具体实现
Serial收集器
- 最基本,发展历史悠久,稳定
- 如名字,单线程收集器
- GC时,暂停所有的工作线程,直到GC结束
- 新生代(复制算法),老年代(标记-整理算法)都使用
- 虚拟机运行在Client模式时的默认新生代收集器
- 如下图,包括Serial和Serial Old
Serial Old收集器
- Serial收集器的老年代版本
- 使用标记-整理算法
- Client模式下,见Serial收集器
- Server模式下
- 在JDK 1.5之前,与Parallel Scanvenge配合使用
- 作为CMS的后备预案,发生Concurrent Model Failue时使用
ParNew收集器
- 新生代收集器
- Serial的多线程版本,沒有太多创新之处
- Server模式下,JVM首选的新生代收集器
- 只有ParNew能和老年代的CMS配合使用
- ParNew收集器是使用-XX:+UseConcMarkSweepGC选项的默认新生代收集器;也可以用-XX:+UseParNewGC选项来强制指定它
- 单CPU环境下,性能不会比Serial好。有线程切换的开销
Parallel Scanvenge收集器
- 新生代收集器
- 复制算法,并行的多线程
- 也叫吞吐量优先收集器
- 目标:达到一个可控制的吞吐量(Throughput)
- 吞吐量=运行用户代码时间/(运行用户代码时间 + GC时间)
- 停顿时间短,适合与用户交互的程序;高吞吐量,可以有效利用CPU时间,尽管完成计算任务,适合后台运算而不需要太多交互的任务
- 提供两个参数精确控制吞