Serial垃圾收集器是JVM中最基础的单线程STW收集器,新生代用复制算法(Eden/Survivor切换),老年代由Serial Old用标记-整理算法处理,全程单线程独占、所有用户线程暂停,适合小堆或嵌入式场景。
Serial 垃圾收集器的单线程工作原理,核心在于“一个线程、全程独占、全局暂停”。它不是简单地“用一个线程干活”,而是整个 GC 过程由唯一一条 JVM 级 GC 线程串行执行,期间所有用户线程(即你的业务代码线程)必须停止运行——这就是 Stop-The-World(STW)。
Serial 收集器在年轻代使用复制算法,依赖 Eden 区和两个 Survivor 区(S0/S1)协作:
当搭配 Serial Old 收集器处理老年代时,采用三阶段标记-整理(Mark-Compact):
这种方式避免了内存碎片,也比复制算法更省空间——因为老年代对象存活率高,复制成本太大。
它的“单线程”优势恰恰来自无并发开销:
可通过 JVM 参数和日志验证:
-XX:+UseSerialGC(同时激活 Serial + Serial Old);java -XX:+PrintCommandLineFlags -version,若未出现 UseSerialGC,说明当前未使用;-Xlog:gc*,gc+heap=debug,日志中出现 Serial 或 SerialOld 字样即为生效。