美文网首页
Java垃圾回收器(一)

Java垃圾回收器(一)

作者: taoguan | 来源:发表于2019-10-23 23:15 被阅读0次

    垃圾收集器组合

    JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图:


    image
    • 图中展示了7种不同分代的收集器:
      Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1;

    • 而它们所处区域,则表明其是属于新生代收集器还是老年代收集器:
      新生代收集器:Serial、ParNew、Parallel Scavenge;
      老年代收集器:Serial Old、Parallel Old、CMS;
      整堆收集器:G1;

    • 两个收集器间有连线,表明它们可以搭配使用

    • 其中Serial Old作为CMS出现"Concurrent Mode Failure"失败的后备预案

    Serial收集器

    Serial(串行)垃圾收集器是最基本、发展历史最悠久的收集器;
    JDK1.3.1前是HotSpot新生代收集的唯一选择;
    1、特点

    针对新生代
    采用复制算法
    单线程收集;
    进行垃圾收集时,必须暂停所有工作线程,直到完成;
    即会"Stop The World";

    Serial/Serial Old组合收集器运行示意图如下:


    image

    2、应用场景

    依然是HotSpot在Client模式下默认的新生代收集器
    优于其他收集器的地方:

    • 简单高效(与其他收集器的单线程相比);
    • 对于限定单个CPU的环境来说,Serial收集器没有线程交互(切换)开销,可以获得最高的单线程收集效率;
    • 在用户的桌面应用场景中,可用内存一般不大(几十M至一两百M),可以在较短时间内完成垃圾收集(几十MS至一百多MS),只要不频繁发生,这是可以接受的

    3、设置参数

    "-XX:+UseSerialGC":添加该参数来显式的使用串行垃圾收集器;

    ParNew收集器

    ParNew垃圾收集器是Serial收集器的多线程版本

    1、特点

    除了多线程外,其余的行为、特点和Serial收集器一样

    ParNew/Serial Old组合收集器运行示意图如下:


    image

    2、应用场景

    Server模式下,ParNew收集器是一个非常重要的收集器,因为除Serial外,目前只有它能与CMS收集器配合工作
    但在单个CPU环境中,不会比Serail收集器有更好的效果,因为存在线程交互开销。

    3、设置参数

    "-XX:+UseConcMarkSweepGC":指定使用CMS后,会默认使用ParNew作为新生代收集器;
    "-XX:+UseParNewGC":强制指定使用ParNew;
    "-XX:ParallelGCThreads":指定垃圾收集的线程数量,ParNew默认开启的收集线程与CPU的数量相同;

    相关文章

      网友评论

          本文标题:Java垃圾回收器(一)

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