GC收集器

①:Serial(串行)收集器

  最基本,历史最悠久的串行收集器,单线程组赛队列,jdk1.5之前默认的收集器。

  优点:简单高效,没有线程交互的开销。

  缺点:单线程,只会使用一个cpu/一条收集线程去完成垃圾收集。

  对应算法:年轻代复制算法,老年代标记整理算法。

②:ParNew收集器(Serial收集器的多线程版本)

  多CPU时对系统资源利用率很好,默认开启的收集线程数与CPU相同,单CPU时Serial有更好的效果。

③:Paraller Scavenge 收集器

  特点:并行,目标是达到一个可控制的吞吐量(运行用户代码时间/(运行用户代码时间+垃圾手机时间)),自适应调节策略。

  优点:适合需要与用户交互的程序,响应速度良好。

  缺点:无法与CMS收集器配合使用。

④:CMS收集器

  优点:并发,低停顿。

  缺点:对CPU资源敏感,面向并发设计的程序都对CPU资源敏感,因为占用了一部分线程(CPU资源)导致程序变慢,吞吐量降低,无法处理浮动垃圾,标记-清除算法导致内存碎片。

⑤:G1收集器

  特点:采用一种与众不同的方式组织堆内存,堆内存划分为多个大小相等的内存块,每个内存块是逻辑连续的一段内存,大小是2的N次方。

  G1提供了三种垃圾回收模式:Young GC,Mixed GC和Full GC,在不同条件下触发。

  Young GC 发生在年轻代的GC算法,一般对象(除了巨型对象)都在Eden Region 中分配内存,当被内存耗尽时,就会触发Young GC。

  Mixed GC 当对象晋升到老年代时,为了避免堆内存耗尽,虚拟机就会触发混合的垃圾收集器Mixed GC,会回收整个Young Region,还回收一部分Old Region。

  Full GC 如果对象内存分配速度过快,Mixed GC来不及回收,导致老年代占满,就会触发Full GC,就是单线程执行的serial old gc,会导致异常长时间的暂停时间,需要进行不断地调优,尽可能避免Full GC。

猜你喜欢

转载自www.cnblogs.com/rempop/p/11595166.html