深入理解jvm学习笔记03:自动内存管理机制之GC与内存分配策略(下)

5. 垃圾收集器

这里讨论HotSpot虚拟机所拥有的收集器。

5.1 Serial收集器

Serial收集器是最基本、发展历史最悠久的收集器。该收集器是一个单线程收集器(进行GC时必须暂停其它所有的工作线程,知道GC结束)。

相比其它收集器:它简单高效,因为单线程无线程交互的开销,而属于单线程收集效率最高的。

时间在几十毫秒到一百多毫秒之间,很适合Clinet模式下的虚拟机。

 

5.2 ParNew收集器

ParNew实际上是Serial收集器的多线程版。它拥有Serial收集器可用的所有控制参数、收集算法、Stop the World(停顿)、对象分配规则、回收策略等。

它现在被作为很多Server模式下的虚拟机的新生代收集器。很大一点原因是只有它和Serial能和之后讲的CMS收集器配合。

 

5.3 Parallel Scavenge收集器

Parallel Scavenge收集器 是一个新生代收集器,所以它是使用复制算法的并行的多线程收集器。

其它收集器是尽可能缩短GC时的停顿时间,而Parallel Scavenge收集器则更关注与达到一个可控的吞吐量。

吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)。

Parallel Scavenge收集器提供了两个参数,用于精确控制吞吐量:

控制最大垃圾收集停顿时间:-XX:MaxGCPauseMillis  (>0ms) 

直接设置吞吐量大小:-XX:GCTimeRatio   (0~100)

 

5.4 Serial Old 收集器

Serial Old 是Serial收集器的老年代版本(就是存活率高的),也是一个单线程收集器,主要还是为Clinet模式的虚拟机

用途1:可作为CMS收集器的后备预案

用途2:与Parallel Scavenge收集器搭配使用。

 

5.5 Parallel Old 收集器

Parallel Old 是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理“算法。该收集器是JDK1.6开始的。

还是注重吞吐量。

 

5.6 CMS 收集器

CMS收集器是一种以获取最短回收停顿时间为目标的收集器。

CMS收集器是基于“标记-清除”的算法实现的,整个过程分为4个步骤:初始标记->并发标记->重新标记->并发清除。

初始标记和重新标记需要停顿,初始标记标记一下GC Roots能直接关联到的对象(很快),并发标记进行GC Roots Tracing的过程,重新标记是为了修正变动的标记记录

 

5.7 G1收集器

G1收集器是一款面向服务端应用的垃圾收集器

特点:1.并行并发降低停顿时间    2.分代收集提高收集效果   3.空间整合提供规整的可用内存,不产生碎片,利于程序长时间运行

4. 可预测的停顿可以指明垃圾收集的片段时间。

过程步骤也分4个步骤:初始标记、并发标记、最终标记、筛选回收

 

对于GC日志,书上已经讲的很好了,我这边就不记录了。

你可能感兴趣的:(深入理解jvm学习笔记03:自动内存管理机制之GC与内存分配策略(下))