众所周知,HotSpot 中有 Serial、CMS、G1 等 7 个 GC。我很困惑的是,它们同时全部工作还是只有部分工作?他们如何相互配合来完成垃圾收集的任务?
以下是 Java 8 中 GC 算法的可能组合。
-XX:+UseSerialGC
- Serail Young(DefNew)+ 系列 Old Mark Sweep Compact-XX:+UseParallelGC
- 并行年轻 (PSYoungGen) + 串行旧马克扫描紧凑型-XX:+UseParallelOldGC
- 并行年轻 (PSYoungGen) + 并行旧马克扫描紧凑型-XX:+UseParNewGC
- 并行年轻 (ParNew) + 串行旧马克扫描紧凑型-XX:-UseParNewGC -XX:+UseConcMarkSweepGC
- 串行年轻(DefNew)+并发标记清除(旧)-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
- 并行年轻(ParNew)+并发标记清除(旧)-XX:+UseG1GC
- G1信息来源.
Parallel Scavenge 和 ParNew 非常相似,但 ParNew 与 CMS(并发标记扫描)兼容,而 Parallel Scavenge 与并行 Mark Sweep Compact 旧空间收集器兼容。
G1仅涵盖新旧收藏。