垃圾收集器

垃圾收集算法是内存回收的方法论,算法

  • 垃圾收集器是内存回收的具体实现。
  • Serial 收集器:最基本,
    • 发展历史最悠久的单线程收集器。jdk1.3 
    • 它在进行垃圾收集时,必须暂停全部其余全部的工做线程。
      • “stop the world “直到它收集结束。 
  • ParNew 收集器:Serial收集器的多线程版本
    • 除了使用多条线程进行垃圾收集外,其他和Serial几乎彻底同样。
    • 是运行在Server模式下的虚拟机中首选的新生代收集器
    • 同时,也只有Serial和ParNew 能和CMS收集器配合工做。
  • Serial Old 收集器:Serial收集器的老年代版本,
    • 是一个单线程使用标记-整理算法的收集器。
    • 主要给Client模式下的虚拟机使用。
  • Parallel Old :parallel Scaenge 收集器的老年代版本,
    • 使用多线程和标记-整理算法。
  • CMS收集器 
    • 一种以获取最短回收停顿时间为目标的收集器。
    • 很大一部分应用于互联网站或则B/S系统的服务端。
    • 基于标记清除算法实现。
      • 主要有四个步骤,
        • 初始标记,
          • 只是标记一下GC Roots能直接关联到的对象速度很快。 
        • 并发标记,
          • 进行GC RootsTracing的过程,与用户进程同步。
        • 从新标记,
          • 修正并发标记期间
            • 因用户程序继续运做
            • 而致使标记产生变更的
            • 那一部分对象的标记记录,
          • 须要”stop the world”.
          • 这个阶段的停顿时间通常会比初始标记阶段稍长一些,
            • 远比并发标记的时间短
        • 并发清除。
          • 与用户进程同步进行。
    • 因为整个过程当中耗时最长的并发标记和并发清除过程收集器线程均可以与用户线程一块儿工做,
      • 因此, 从整体上 来讲, CMS收集器的内存回收过程是与用户线程一块儿并发执行的。
    • CMS也有很明显的缺点,主要是 
      • 1对CPU资源很是敏感
      • 2没法处理浮动垃圾
        • 【从新标记解决的是将误标为不可达对象标记为可达,可是会漏标不可达对象,这部分对象为浮动垃圾】 
      • 3使用标记清除算法会产生大量碎片
  • G1 收集器:
    • 一个面向服务器应用的垃圾收集器,
    • 主要有如下优势,
      • 并行与并发,
      • 分代收集,
      • 空间整合(总体上标记整理,局部是复制算法),
        • 可预测的停顿(相比CMS的一大优点)。
      • 将堆划为多个大小相等的独立区域(region),
        • 新生代老年代再也不物理隔离了.
相关文章
相关标签/搜索