文章目录
CMS 触发老年代 GC 条件
先看看触发老年代GC的条件。CMS GC 在实现上分成 foreground collector(前台收集)和 background collector(后台收集)。前台收集相对比较简单,后台收集比较复杂,情况比较多。不管是 foreground collector 还是 background collector 使用的都是 mark-sweep 算法,分阶段进行标记清理,优点很明显-低延时,但最大的缺点是存在碎片,内存空间利用率低。
CMS GC 可以触发压缩式 GC(标记压缩算法),就是触发了 Full GC,否则还是正常的并发收集。压缩式 GC 这个过程就必须要等待内存分配成功后业务线程才能继续往下面走,因此整个过程必须 STW。
foreground collector(前台收集)
- foreground collector 触发条件比较简单,就是没有空间分配对象时,就会触发一次 CMS 并发 GC 收集来进行空间回收。
background collector(后台收集)
CMS 大家都知道是并发收集器,一般常见的并发收集就是正常情况下触发 background collector 的 CMS GC,对业务影响很小。当并发模式搞不定了,就会触发 Full GC,这个回收过程业务线程是不可用的,这时候其实就是触发了 FullGC。
background collector 是通过 CMS 后台线程