深入理解JVM-垃圾收集器篇

垃圾收集器:内存回收的具体实现。

新生代收集器:Serial,ParNew,Parallel Scavenge

老生代收集器: CMS ,Serial Old(MSC),Parallel Old

介于老生代和新生代之间:G1

(1)Serial : 最基本,发展历史最悠久的单线程收集器。对于运行在Client模式下的虚拟机是一个很好的选择。

缺点:Serial的单线程不仅仅说明它只会使用一个CPU或一个收集线程去完成垃圾收集工作,更重要的是它进行垃圾收集时,必须暂停其他所有的线程工作,直到它收集结束。

优点:简单而高效(与其他收集器的单线程相比),对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集可以获得最高的单线程收集效率。

 

(2)ParNew:Serial收集器的多线程版本,许多运行在Server模式下的虚拟机首选的新生代收集器。

优点:除了Serial收集器外,目前只有ParNew可以和CMS收集器配合工作。

缺点:由于存在线程交互的开销,该收集器在通过超线程技术实现的两个CPU的环境中都不能百分之百地保证可以超越Serial收集器。

 

(3)Parallel Scavenge:目标是达到一个可控制的吞吐量。

(吞吐量是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间/(运行用户时间代码+垃圾收集时间))

特点:停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户 体验,而高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互任务。

 

(4)Serial Old:Serial收集器的老年代版本。

 

(5)Parallel Old收集器:Parallel Scavenge收集器的老年代版本。

 

(6)CMS收集器:是一种以收获最短回收停顿时间为目标的收集器。基于“标记-清除”算法,分为4个步骤:

1.初始标记:标记GC Roots能直接关联到的对象。

2.并发标记:进行GC Roots Tracing的过程。

3.重新标记:为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录。

4.并发清除

缺点:

1.CMS收集器对CPU资源非常敏感。

2.CMS收集器无法处理浮动垃圾,可能出现"Concurrent Mode Failure"失败而导致另一次Full GC的产生。

3.收集结束时会有大量时间碎片产生。

 

(7)G1收集器:面向服务端应用的垃圾收集器。

特点:并行与并发,分代收集,空间整合,可预测的停顿

G1收集器的运作步骤:初始标记,并发标记,最终标记,筛选回收

 

posted @ 2017-01-16 15:19  bluesnail95  阅读(120)  评论(0)    收藏  举报