JVM-GC总结-垃圾收集器

来源:互联网 发布:ed2k下载软件 编辑:程序博客网 时间:2024/04/29 22:22

HotSpot虚拟机包含的收集器:

有连接线的代表可以再jdk1.6下搭配使用.

串行收集器

Serial收集器

参数: -XX:UseSerialGC

单线程处理所有垃圾回收,效率比较高,但是无法发挥多处理器的优势,适合单处理器机器并且内存较小(几十兆到一俩百)的情况下.

Serial Old收集器

Serial收集器的老年代版本,同样是一个单线程收集器,使用标记-整理算法.主要是在client模式下的虚拟机使用.

并行收集器


ParNew收集器

参数:-XX:+UseParNewGC

Serial收集器的多线程版本,优势在于jdk1.6中除了Serial之外只有他能于CMS收集器配合工作.

Parallel Scavenge收集器

参数:

 

CMS等收集器的目标是尽可能的缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标是达到一个可控制的吞吐量,这里吞吐量是指cpu用于运行用户代码的时间与cpu总耗时的比值.

停顿时间短适合于需要与用户交互的程序,良好的响应速度能提升用户体验,而高吞吐量则可以最高效率的利用cpu时间,尽快的完成程序的任务,适用于后台运算.此收集器也被称作吞吐量优先的收集器.

 

参数:-XX:MaxGCPauseMillis=<N>

该参数指定垃圾回收时的最长暂停时间

参数:-XX:GCTimeRatio=<N>

该参数为垃圾回收时间与非垃圾回收时间的比值,例如设置为19,则允许的最长GC时间就占总时间的5%.

 

Parallel Old收集器

Parallel Scavenge收集器的老年代版本,使用多线程和标记-整理算法,与ParallelScavenge收集器配合使用.


并发收集器

可以保证大部分工作都并发进行,垃圾回收只暂停很少的时间,此收集器适合对相应时间要求比较高的大规模应用.


CMS收集器

参数:-XX:+UseConcMarkSweepGC

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器.适用于重视用户体验要求低响应时间的系统.该收集器基于Mark-Sweep算法实现,

整个收集过程分为四个阶段:

Ø  初始标记(CMSinitial Mark)

Ø  并发标记(CMSconcurrent Mark)

Ø  重新标记(CMSremark)

Ø  并发清除(CMSConcurrent sweep)

初始标记和重新标记俩个阶段仍然需要暂停应用,初始标记只是标记一下GCRoots能直接关联到的对象,速度很快.并发标记阶段是进行GC Roots Tracing的过程,而重新标记阶段是为了修正并发标记期间,用户程序继续运行而导致的标记产生变动的那一部分对象的标记记录.这个停顿会比初始阶段长一些.


整体来看cms收集器的内存回收过程是与用户线程一起并发地执行的.

缺点:

Ø  对cpu资源比较敏感,在cpu个数较小时会降低吞吐量.

Ø  会产生浮动垃圾

Ø  由于是Mark-sweep算法所以会产生内存碎片

垃圾回收配置参数列表

0 0