JVM的常见的垃圾收集器
1.Serial(Serial + Serial Old):最古老的垃圾收集器,“Serial”体现在其收集工作是单线程的, 在进行垃圾收集过程中,会进入臭名昭著的“Stop-The-World”状态,一直是 Client 模式下 JVM 的默认选项。针对新生代采用复制算法(-XX:+UseSerialGC)
2.Serial Old:作用于老年代,采用了标记 - 整理(Mark-Compact)算法,与Serial配合使用。
3.ParNew:新生代 GC 实现,是 Serial GC 的多线程版本,最常见的应用场景是配合老年代的 CMS GC 工作。出发点在于加速资源回收的速度,以减少应用的STW时间;高响应速度(XX:+UseParNewGC) ParNew+cms+serialold
4.Parallel Scavenge: 新生代的多线程收集器(并行收集器) 其采用的是Copying算法,是 server 模式 JVM 的默认 GC 选择。出发点在于资源回收的吞吐量,高吞吐量(-XX:+UseParallelGC) Parallel Scavenge + Parallel Old
5.Parallel Old:并行运行;作用于老年代;标记-整理算法;吞吐量优先;适用于后台运算而不需要太多交互的场景。
6.CMS:基于标记 - 清除(Mark-Sweep)算法,设计目标是尽量减少停顿时间,采用的标记 - 清除算法,存在着内存碎片化问题,所以难以避免在长时间运行等情况下发生 full GC(-XX:+UseConcMarkSweepGC),在 JDK 9 中被标记为废弃(deprecated)
7.G1垃圾收集器: 见另一篇笔记