JVM/GC/CMS

CMS (Concurrent Mark Sweep)

  • jdk1.4后期版本开始引入的新gc算法
  • ParNew(新生代) + CMS(老年代)组合使用
  • 使用标记-清除算法
  • 目标:适合于B/S等对响应时间要求高的场景
  • 缺点:运行结束产生大量空间碎片
  • 缺点:由于分配给用户使用的老年代空间不足造成可能出现“Concurrent Mode Failure”

流程

JVM/GC/CMS_第1张图片
CMS使用标记-清除算法

  • 初始标记(STW)
  • 预先清除
  • 最终标记(STW)
  • 并发清除

Concurrent Mode Failure

  • 问题:并发清除阶段应用线程和GC线程是同时运行的,也就是对象的分配和对象的清除是同时运行的。如果,分配给应用线程使用的老年代空间不足就会出现“并发模式错误”Concurrent Mode Failure。
  • GC:“并发模式错误”将引起一次Full GC,调用Serial Old收集器重新对老年代进行垃圾回收,此时的停顿时间将明显延长。
  • 解决:Concurrent Mode Failure可以通过减少"CMS初始占用内存比例" -XX:CMSInitiatingOccupancyFraction参数,以扩大应用线程可用老年代内存空间比例,进而降低出现“并发模式错误”Concurrent Mode Failure的概率。

你可能感兴趣的:(jvm,jvm)