美文网首页Java 核心技术
JVM垃圾回收器-串行并行和吞吐量

JVM垃圾回收器-串行并行和吞吐量

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2020-12-14 07:24 被阅读0次

    串行Serial收集器

    1.SerialGC

    新生代:复制算法
    使用方式:-XX:+UseSerialGC
    特点:简单高效,清理非常干净,但CPU利用率高,停顿时间较长
    使用场景:桌面应用程序或堆内存空间很小的项目

    2.SerialGC

    老年代:标记压缩(整理)算法
    使用场景:主要用于Client模式,而在Server模式下有两大用途:
    (A)、在JDK1.5及之前,与Parallel Scavenge收集器搭配使用(JDK1.6有Parallel Old收集器可搭配);
    (B)、作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用;

    并行收集器

    多个gc线程同时清理堆内存垃圾,处理器要多核才能发挥功效。

    1.ParNew收集器(Serial收集器的多线程版本)

    特点:除了多线程,其余行为特点与Serial收集器一样,主要用于新生代垃圾收集器。
    使用场景:在Server模式下,ParNew收集器是一个非常重要的收集器,因为除Serial外,目前只有它能与CMS收集器配合工作;但在单个CPU环境中,不会比Serail收集器有更好的效果,因为存在线程交互开销。
    使用方式:-XX:+UseParNewGC
    可通过-XX:ParallelGCThreads 限制线程数量(ParNew默认开启的收集线程与CPU的数量相同)
    "-XX:+UseConcMarkSweepGC":指定使用CMS后,会默认使用ParNew作为新生代收集器;

    2.吞吐量Parallel Scavenge优先收集器(PS收集器)

    和parnew收集器一样,只是更注重了吞吐量。
    特点:停顿时间短,回收效率高,对吞吐量要求高。
    使用场景:高吞吐量为目标,减少垃圾收集时间,让用户代码获得更长运行时间,比如批量处理、订单处理、工资支付、科学计算的应用程序。
    使用方式:-XX:UseAdaptiveSizePolicy:打开之后,就不需要设置细节【新生代大小(-Xmn),Edian,survivor比例及(-XX:SurvivorRatio)晋升老年代年龄(-XX:PretenureSizeThreshold)等】虚拟机根据系统运行状况,调整停顿时间,吞吐量, GC自适应调节策略,区别parnew。
    -XX:GCTimeRatio 吞吐量大小 (0,100)设置垃圾回收时间占总时间的比例, 默认最大99(即1%时间用于垃圾收集)。
    -XX:MaxGCPauseMillis 垃圾回收器最大停顿时间,数值越小则停顿时间少,发生频繁,也可能导致吞吐量的下降。

    3.Parallel Old收集器

    老年代:标记整理算法
    使用场景:JDK1.6及之后用来代替老年代的Serial Old收集器;特别是在Server模式,多CPU的情况下;
    使用方式:-XX:+UseParallelOldGC

    吞吐量与收集器关注点说明

    (A)、吞吐量(Throughput)
    CPU用于运行用户代码的时间与CPU总消耗时间的比值;
    即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间);
    高吞吐量即减少垃圾收集时间,让用户代码获得更长的运行时间;
    (B)、垃圾收集器期望的目标(关注点)

    • 停顿时间
      停顿时间越短就适合需要与用户交互的程序;
      良好的响应速度能提升用户体验;
    • 吞吐量
      高吞吐量则可以高效率地利用CPU时间,尽快完成运算的任务;
      主要适合在后台计算而不需要太多交互的任务;
    • 覆盖区(Footprint)
      在达到前面两个目标的情况下,尽量减少堆的内存空间;
      可以获得更好的空间局部性;

    相关文章

      网友评论

        本文标题:JVM垃圾回收器-串行并行和吞吐量

        本文链接:https://www.haomeiwen.com/subject/afeegktx.html