JVM GC 实现分类

  1. serial: 单线程 既可以年轻代 (标记复制)也可以老年代(标记清除整理);
  2. ParNew: 年轻代, 多线程版本的serial, 与 CMS 搭配使用,强交互,适合互联网应用;
  3. Parallel Scavenge: 年轻代,多线程,强调高吞吐量-通过改变年轻代大小实现, 根据参数自适应策略;
  4. ParOld: 老年代,多线程,标记整理,与 PS 搭配使用,强调高吞吐量
  5. CMS: 老年代,多线程,大多数时间与应用线程同时运行,除非并发失效,强调强交互,与 ParNew 搭配
    -- 初始标记 CMS initial mark - stop the world
    -- 并发标记 CMS concurrent mark
    -- 重新标记 CMS remark - stop the world
    -- 并发清除 CMS concurrent sweep
    浮动垃圾 和 并发失效 (内存不够) -> serial old 和 垃圾碎片
    设置的 CMSInitiatingOccupancyFraction 的大小和次数的 tradeoff
  6. G1: 多线程,既年轻代,又老年代,适合大于大内存,分 region;
    -- 可预测的停顿时间模型
    -- 回收价值列表 - 优先级

标签: none

添加新评论