JAVA垃圾收集算法总结以及CMS、G1算法详解( 三 )

  • 可预测的停顿:这是G1相对于CMS的一个优势 , 降低停顿时间是G1和CMS共同的关注点 。
  • 总结随着JVM的发展 , ORACLE官方推出的JDK11又有了新算法ZGC , 它对内存碎片的整理更加优化 , 回收暂停时间也更加缩短 , 具体细节本人还没有深入研究 , 后面有机会可以写文章专门介绍它 。
    最后 , 我把目前主流JDK使用到的JVM垃圾收集器采用的算法做下简单总结 , 方便大家对比参考 , 
    1. 新生代垃圾收集器
    • Serial-复制算法:Serial收集器是新生代单线程收集器 , 优点是简单高效 , 算是最基本、发展历史最悠久的收集器 。它在进行垃圾收集时 , 必须暂停其他所有的工作线程 , 直到它收集完成 。
    • ParNew收集器-复制算法:ParNew收集器是新生代并行收集器 , 其实就是Serial收集器的多线程版本 。
    • Parallel Scavenge(并行回收)-复制算法:
    • Parallel Scavenge收集器是新生代并行收集器 , 追求高吞吐量 , 高效利用 CPU 。该收集器的目标是达到一个可控制的吞吐量(Throughput) 。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值 , 即 吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间) 。停顿时间越短就越适合需要与用户交互的程序 , 良好的响应速度能提升用户体验 , 而高吞吐量则可用高效率地利用CPU时间 , 尽快完成程序的运算任务 , 主要适合在后台运算而不需要太多交互的任务 。
    2. 老年代垃圾收集器
    • Serial Old-标记整理算法:Serial Old是Serial收集器的老年代版本 , 它同样是一个单线程(串行)收集器 , 使用标记整理算法 。这个收集器的主要意义也是在于给Client模式下的虚拟机使用
    • Parallel Old-标记整理算法:Parallel Old 是Parallel Scavenge收集器的老年代版本 , 使用多线程和“标记-整理”算法 。
    • CMS:标记清除算法
    • G1:标记整理算法

    【JAVA垃圾收集算法总结以及CMS、G1算法详解】


    推荐阅读