JVM清除算法

  1. 标记-清除算法

    标记之后清除所有标记过的对象,会产生大量的内存碎片,两个阶段效率都不高

  2. 复制算法

    将内存分为两部分,第一部分的空间占满了就将还存活的对象, 复制到另一块上,把用过的那一块清除掉

    现在的商业虚拟机新生代就是使用这种但是是划分为8:1:1 eden、 survivor0、 survivor1、每次就使用eden存放新建的对象, 如果eden内存不够就将存活的对象复制到survivor0,survivor0内存不够就复制到survivor1,

  3. 标记-整理算法

    老年代使用的清除算法,将存货的对象标记,然后向一端移动 将边界之外的区域清除

  4. Serial

    单线程清除,新生代使用,使用时用户线程会暂停

  5. ParNew

    Serial的多线程实现,默认与cpu数量一样,使用时用户线程任然会暂停

  6. Parallel Scavenge

    新生代收集器 复制算法 并行的多线程收集器 目标是达到可控制的吞吐量 (吞吐量=运行用户代码的时间/运行用户代码的时间+垃圾收集时间) 停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户的体验,高吞吐量 可以最高效率的利用CPU时间,尽快的完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务

  7. Serial Old

    Serial的老年代版本,单线程收集器,使用标记整理算法,配合parallel scavenge使用

  8. Parallel Old

    Parallel的老年版本 多线程和标记整理算法

  9. CMS

    以获取最短回收时间为目标的收集器,重视服务器的响应速度 标记-清除算法 初始标记 并发标记 重新标记 并发清除初始标记只是标记GC Roots能直接关联到的对象, 并发标记就是进行GC Roots Tracing的过程,重新标记阶段是为了修正并发标记期间,用户程序继续运行而导致的标记产生变动的那部分对象的标记记录 ,这个阶段的停顿时间一般会比出师表及阶段稍长一点,但比并发标记短。无法清除浮动垃圾, 可能出现Concurrent Mode Failure失败而导致淋一次Full GC产生

  10. G1

    标记整理 不会产生空间碎片 非常精确的控制停顿 G1将整个java堆(新生代 老年代)划分为 多个大小固定的独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表, 每次允许的收集时间,优先回收垃圾最多的区域。

  11. Minor GC 和Full GC

    Minor GC 新生代的垃圾收集动作,频繁发生,回收速度快

    Major GC或者Full GC老年代的GC

发布了91 篇原创文章 · 获赞 4 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章