GC 收集器 参数
1 堆


2 串行收集器
- 最古老,最稳定
- 效率高
- 可能产生较长的停顿
- -XX:+UseSerialGC
- 新生代,老年代 使用串行回收
- 新生代使用复制
- 老年代使用标记-压缩
![]()
3 并行收集器
-
ParNew
- -XX:+UseParNewGC
- 新生代并行
- 老年代串行
- Serial 收集器新生代的并行版本
- 复制算法
- 多线程,需要多核支持
- -XX:ParalleGCThreads 限制线程数量
![]()
- -XX:+UseParNewGC
-
Parallel 收集器
- 类似 ParNew
- 新生代复制算法
- 老年代 标记-压缩
- 更加关注吞吐量
- -XX:+UseParallelGC
- 使用 Parallel 收集器 + 老年代串行
- -XX:+UseParallelOldGC
- 使用Parallel 收集器 + 老年代并行
-
其他参数
4 CMS 收集器
Concurrent Mark Sweep 并发标记-清除算法
4.1 CMS 基本概念
-
标记-清除 算法 -----注重并发性
-
非 标记-压缩 --如使用压缩,用户线程的对象在压缩后,寻址失败
-
并发阶段会减少吞吐量 占用CPU过高
-
只面向 老年代收集器
-
新生代 并行收集器 ParNew
-
-XX:+UseConcMarkSweepGC 打开标记
4.2 CMS收集器的步骤
- 初始标记 (暂停用户线程,单线程)
- 根可以直接关联到的对象
- 速度块
- 并发标记 (和用户线程一起执行)
- 主要标记过程
- 重新标记(暂停用户线程,多线程)
- 由于并发标记时,用户线程仍然在运行,因此在清理前,在做修正
- 并发清除(和用户线程一起执行)
- 基于标记结果,直接清理对象
-
注意
-
仍然由全局停顿
-
![]()
-
![]()
4.3 CMS 特点
-
尽可能降低停顿
-
会影响系统的整体吞吐量和性能
-
清理不彻底
-
不能在空间快满时再清理
- -XX:CMSInitialtingOccupancyFraction 设置GC触发阈值
- 不幸内存预留空间不足, concurrent mode failure
-
??Question为什么并行串行收集器使用标记-压缩,CMS采用标记-清除 算法
- 并行串行 采用标记压缩可以减少内存的碎片,提高系统性能
- CMS 采用标记-清除
- 能够占用更少的CPU
- 能够提高并发性能
- 若采用压缩算法,可能移动用户线程的对象,使其寻址失败
-
CMS 碎片优化参数配置
5 GC参数整理








浙公网安备 33010602011771号