GC 收集器 参数

1 堆

2 串行收集器

  • 最古老,最稳定
  • 效率高
  • 可能产生较长的停顿
  • -XX:+UseSerialGC
    • 新生代,老年代 使用串行回收
    • 新生代使用复制
    • 老年代使用标记-压缩

3 并行收集器

  • ParNew

    • -XX:+UseParNewGC
      • 新生代并行
      • 老年代串行
    • Serial 收集器新生代的并行版本
    • 复制算法
    • 多线程,需要多核支持
    • -XX:ParalleGCThreads 限制线程数量
  • 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参数整理

posted on 2019-03-16 12:30  mullen  阅读(128)  评论(0)    收藏  举报

导航