垃圾回收器CMS和G1的区别

图片[1]-垃圾回收器CMS和G1的区别-编程社

区别一:使用的范围不一样

  • CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用
  • G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用

区别二:STW的时间

  • CMS收集器以最小的停顿时间为目标的收集器。
  • G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型)

区别三:垃圾碎片

  • CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片
  • G1收集器使用的是“标记-整理”算法,进行了空间整合,没有内存空间碎片。

区别四:垃圾回收的过程不一样

注意这两个收集器第四阶段得不同

区别五: CMS会产生浮动垃圾

  • CMS产生浮动垃圾过多时会退化为serial old,效率低,因为在上图的第四阶段,CMS清除垃圾时是并发清除的,这个时候,垃圾回收线程和用户线程同时工作会产生浮动垃圾,也就意味着CMS垃圾回收器必须预留一部分内存空间用于存放浮动垃圾
  • 而G1没有浮动垃圾,G1的筛选回收是多个垃圾回收线程并行gc的,没有浮动垃圾的回收,在执行‘并发清理’步骤时,用户线程也会同时产生一部分可回收对象,但是这部分可回收对象只能在下次执行清理是才会被回收。如果在清理过程中预留给用户线程的内存不足就会出现‘Concurrent Mode Failure’,一旦出现此错误时便会切换到SerialOld收集方式。
© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容