发布于2026-07-09 阅读(0)
扫一扫,手机访问
先说说Serial GC和Parallel GC这两个家伙。虽然它们都属于“吞吐量优先”的垃圾回收器家族(别急,这和G1那种“实时响应型”不一样),但在内部干活的方式上,可谓天差地别。一句话概括:Serial GC是单线程苦力,Parallel GC是多线程团队;两者都会让你停住等待(STW),但Parallel靠人多势众把暂停时间砸下来;Serial追求极简低开销,适合单核小户,Parallel则一门心思扎在吞吐量最大化上,专为多核时代而生。

Serial GC全程只用一根线程包揽所有GC任务:标记对象、复制新生代、整理老年代,全都是这位“独行侠”一个人干,线程独占GC工作流,其他线程老老实实等着。而Parallel GC则是拉帮结派——启用多个GC线程并行协作,比如多线程同时扫描对象图、并行复制存活对象,或者在标记完成后多线程并行整理内存空间。简单说,一个单打独斗,一个组队刷副本。
两者都会触发完整的Stop-The-World暂停,所有用户线程全部冻结——这一点完全相同,没有例外。关键区别在于:Serial GC在STW期间只能单线程干活,耗时与堆大小、存活对象数呈强正相关,堆越大越慢;Parallel GC在STW期间靠多线程分摊工作负载,实际暂停时间显著缩短,尤其在多核CPU和中等规模堆(1–8GB)下效果非常明显。打个比方:同样搬一堆砖,一个人搬要10分钟,十个人搬可能1分钟就搞定——当然,前提是协调成本不高。
Serial GC追求极简与低开销,不引入线程同步、任务划分、负载均衡等复杂机制,适合资源受限或单核环境,甚至在某些嵌入式场景中还能看到它的身影。Parallel GC则是明确以“吞吐量最大化”为唯一目标——通过-XX:GCTimeRatio或-XX:MaxGCPauseMillis等参数直接控制GC时间占比,其线程数(-XX:ParallelGCThreads)、新生代/老年代并行策略都围绕吞吐效率优化。调优的重心完全不同:Serial只要关注堆大小和GC频率就够了,Parallel则要平衡线程数、分代大小和暂停时间目标。
Serial GC的组合是Serial(新生代,复制算法) + Serial Old(老年代,标记-整理);Parallel GC对应的是Parallel Scavenge(新生代,多线程复制) + Parallel Old(老年代,多线程标记-整理)。虽然算法类型相似,但Parallel系列对大对象晋升、GC触发阈值、压缩时机等做了吞吐导向的专项调整。例如,更激进的年轻代回收频率(尽可能让对象在年轻代就被回收)、更保守的老年代碎片控制策略(避免频繁触发Full GC)。从实现细节上看,Parallel Old在并发标记后使用多线程整理,而Serial Old只能单线程整理——这在老年代较大时差距尤为明显。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8