serial gc单线程执行所有gc任务,parallel gc多线程并行执行;两者均触发完整stw暂停,但parallel gc通过多线程显著缩短暂停时间;serial gc追求极简低开销,适合单核环境,parallel gc以吞吐量最大化为目标,专为多核优化。

核心执行模型不同
Serial GC全程仅用一个线程执行所有GC任务,包括对象标记、复制(新生代)或整理(老年代),且该线程独占GC工作流;Parallel GC则启用多个GC线程并行协作完成同一阶段任务,比如多线程同时扫描对象图、并行复制存活对象、或并发标记后多线程并行整理内存空间。
STW期间的并行能力差异
两者都会触发完整的Stop-The-World暂停,用户线程全部冻结——这点完全相同。关键区别在于:Serial GC在STW内只能单线程干活,耗时与堆大小、存活对象数呈强正相关;Parallel GC在STW内靠多线程分摊工作负载,实际暂停时间显著缩短,尤其在多核CPU和中等规模堆(1–8GB)下效果明显。
设计目标与调优重心分离
Serial GC追求极简与低开销,不引入线程同步、任务划分、负载均衡等复杂机制,适合资源受限或单核环境;Parallel GC明确以“吞吐量最大化”为唯一目标,通过-XX:GCTimeRatio或-XX:MaxGCPauseMillis等参数直接控制GC时间占比,其线程数(-XX:ParallelGCThreads)、新生代/老年代并行策略均围绕吞吐效率优化。
适用分代与算法实现细节
Serial GC组合为Serial(新生代,复制算法) + Serial Old(老年代,标记-整理);Parallel GC对应Parallel Scavenge(新生代,多线程复制) + Parallel Old(老年代,多线程标记-整理)。虽然算法类型相似,但Parallel系列对大对象晋升、GC触发阈值、压缩时机等做了吞吐导向的专项调整,例如更激进的年轻代回收频率、更保守的老年代碎片控制策略。











