2. 垃圾收集器
HotSpot的七个垃圾收集器
1. Serial
用于新生代
串行,单线程的执行垃圾回收,会出现STW
使用复制算法
优点:
- 在单个CPU下,单线程,没有线程切换的开销,因此效率高
不足:
- 会出现STW(stop the world)
2. ParNew(serial+多线程)
用于新生代
serial的多线程版本
采用复制算法
只有他能和CMS连用(除了serial)
3. Parallel Scavenge
用于新生代
多线程
采用复制算法
与其他垃圾收集器不同的是,ps目标是实现高吞吐量,而其他垃圾收集器目标是尽快缩短STW的时间
吞吐量:运行用户代码的时间/(运行用户代码的时间+垃圾收集的时间)
用于后台计算,不需要太多用户交互的任务
4. Serial Old
Serial的老年代版本
采用标记整理算法
单线程
作为CMS收集器的后备方案,当出现Concurrent Mode failure时使用
5. Parallel Old
Parallel Scavenge的老年版本
采用标记整理算法
多线程
吞吐量优先
6. CMS
CMS(Concurrent Mark Swep)
采用标记清除算法
四个步骤
- 初始标记:标记一下GC Roots能直接关联到的对象,速度很快,会出现STW
- 并发标记:进行GC Roots Tracing的过程,耗时最长,不会出现STW(因为是并行的)
- 重新标记:因为是并发标记,所有要修正并发过程中发生变化的那部分对象,会出现STW
- 并发清除:采用标记清除算法进行清除,不会出现STW
7. G1
逻辑上分区,物理上不分区
基于标记整理算法,相比于CMS来说,不会产生碎片
在不牺牲吞吐量的前提下,实现低停顿垃圾回收