美文网首页
垃圾收集器

垃圾收集器

作者: 快乐的河马 | 来源:发表于2018-09-04 18:21 被阅读0次

    1. 新生代收集器

    Serial

    1. 单线程工作。
    2. 工作时会暂停其他工作线程,直到它收集结束。
    3. 触发严重的“stop the world”
    4. 在垃圾收集时,采用复制算法进行垃圾收集
    

    ParNew

    1. 多线程工作。
    2. 其他特性和Serial收集器一样。
    3. 唯一一个可以与CMS收集器配合工作。(配置-XX:+UseConcMarkSweepGC使用CMS进行老年代垃圾收集,默认对应的新生代垃圾收集器就是ParNew)
    4. ParNew是并行收集,CMS是并发收集。
        并行:多条垃圾收集线程工作的时候,用户线程处于等待状态。
        并发:用户线程和垃圾收集线程同时执行。
    

    ParallelScavenge(可控的吞吐量)

    ParallelScavenge的关注点是达到一个可控制的吞吐量。适用于后台运算。
    CMS的关注点是尽量缩短垃圾收集时用户线程的停顿时间。适用于用户交互程序。
    
    吞吐量:用户线程执行时间/(用户线程执行时间 + 垃圾收集时间)
    

    2. 老年代收集器

    CMS

    步骤:
    1. 初始标记
    2. 并发标记
    3. 重新标记
    4. 并发清除
    
    其中,
    并发标记和并发清除,是允许用户线程和垃圾收集线程并发执行。不发生STW
    初始标记和重新标记,需要暂停用户线程,会发生STW
    
    缺点:
    1. 使用CMS,由于是垃圾回收线程和用户线程并发执行,会导致应用程序变慢,吞吐量下降。
    2. 产生一定的浮动垃圾。并发清理阶段,用户线程的运行会产生新的垃圾,这一部分垃圾是在标记阶段之后,
       因此在当此收集过程中无法回收,只能放到下次垃圾收集。这一部分垃圾称为浮动垃圾。
    3. 会产生大量的内存碎片
    

    SerialOld(MSC)

    ParallelOld

    3. G1收集器

    1. 支持并行(多cpu)和并发(收集线程和用户线程并发执行)
    2. 分代收集(逻辑上的分代,物理上不连续的内存也可以是同一代)
    3. 采用内存分区(Region)的思路,将内存划分为一个个相等大小的内存分区,回收时则以分区为单位进行回收,
    存活的对象复制到另一个空闲分区中。由于都是以相等大小的分区为单位进行操作,因此G1天然就是一种压缩方案(局部压缩);
    4. 支持混合收集,新生代和老年代可以同时进行垃圾收集 
    

    相关文章

      网友评论

          本文标题:垃圾收集器

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