四、垃圾回收器

来源:互联网 发布:成功率最高的网络骗术 编辑:程序博客网 时间:2024/06/06 14:11

1.Serial 收集器

       该收集器是一个单线程收集器,它的单线程不只是说只用一个CPU或一个回收线程去完成垃圾收集工作,更重要的是在它进行收集时,会暂停掉所有的用户线程,直到收集完成。

2、ParNew 收集器

       它是Serial收集器的多线程版本,除了使用多线程进行垃圾收集之外,其余行为都和Serial收集器一样。

3、Parallel Scavenge 收集器

       该收集器是一个新生代收集器,使用复制算法,且是多线程的并行收集器。
       它与前面收集器所不同的是关注点不同,ParNew收集器是为了降低停顿时间,而Parallel Scavenge收集器是关注的吞吐量。吞吐量 = 运行代码的时间/(运行代码时间+停顿时间)。

4、Serial Old收集器

       它是Serial 收集器的老年代版本,也是单线程的收集器,采用标记-整理算法。

5、Parallel Old 收集器

       它是Parallel Scavenge收集器的老年代版本,也是多线程的收集器,采用标记-整理算法。

6、CMS收集器

       该收集器是基于标记-清除算法实现的,收集过程分为四个步骤:
             ①初始标记:只标记与GC Roots直接相连的对象。
             ②并发标记:是进行GC Roots Tracing的过程。
             ③重新标记:为了修正在并发标记阶段,因用户程序继续进行而导致标记发生变动的部分进行重新标记。
             ④并发清除:用多线程的方式清理标记的对象。
       其中,初始标记和重新标记仍需要暂停所有的用户线程。
优点:并发收集,低停顿。
缺点:
       ①对CPU资源非常敏感,在虚拟机中,默认的回收线程数为(CPU数量+3)/4 。在CPU大于4时,回收线程最多占有25%的CPU资源,但当CPU小于4时,就会导致回收线程占有量显著增高,会导致用户程序的执行效率下降。
       ②无法处理浮动垃圾,浮动垃圾是指在并发清理阶段,用户线程还在运行,可能会产生新的垃圾对象,该垃圾对象没有被标记所以无法被回收。
       ③因采用标记-清除算法,所以会产生不连续的内存碎片。

7、G1收集器

       是一款面向服务器应用的垃圾收集器,它的目的是在实现高吞吐量的同时,尽量降低停顿的时间。回收步骤分为:初始标记,并发标记,最终标记,垃圾回收。
       其中,除并发标记外,其他三个步骤都需要暂停所有的用户线程。
       G1收集器相对于CMS收集器的有两个优点:
       ①G1收集器是基于标记-整理算法的,所以不会产生不连续的内存碎片。
       ②G1收集器可以非常精确的控制用户线程的停顿时间,即能让使用者明确指定在一段时间内垃圾回收所用的时间。

1 0
原创粉丝点击