核心特点
Serial收集器:
- 单线程收集器(只用一个线程进行GC)
- 新生代收集器
- 使用复制算法
- 必须暂停所有应用线程(Stop The World)
Serial Old收集器:
- Serial的老年代版本
- 使用标记-整理算法
工作流程
应用线程执行
↓
触发GC
↓
Stop The World(暂停所有应用线程)
↓
单个GC线程执行垃圾回收
↓
恢复应用线程
图解:
应用线程: ████████ [暂停] ████████
GC线程: ▓▓▓▓▓▓
(单线程)
优缺点
优点
- 简单高效:单线程无需线程切换开销
- 内存占用小:适合小堆内存
- 客户端模式默认:适合桌面应用
缺点
- Stop The World时间长:单线程收集效率低
- 不适合服务端:停顿时间无法接受
使用方法
# 启用Serial收集器(新生代)+ Serial Old(老年代)
java -XX:+UseSerialGC -jar app.jar
# 查看GC日志
java -XX:+PrintGCDetails -XX:+UseSerialGC -jar app.jar
适用场景
- 客户端应用:桌面应用、小工具
- 小内存应用:堆内存<100MB
- 单CPU环境:无法利用多线程优势
GC日志示例
[GC (Allocation Failure) [DefNew: 3072K->320K(3456K), 0.0015428 secs]
3072K->1344K(11904K), 0.0015779 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
解读:
· DefNew:新生代使用Serial收集器
· 3072K->320K:新生代从3MB降到320KB
· (3456K):新生代总大小3.5MB
· 0.0015428 secs:GC耗时1.5毫秒
总结
- Serial:最古老、最简单的收集器
- 单线程:Stop The World时间长
- 适用场景:客户端、小内存应用
- 现代应用:基本不使用(除非资源极度受限)
下一篇预告:《ParNew/Parallel:并行收集器》