JVM (PART VIII)HotSpot的各种收集器和常见组合

来源:互联网 发布:网络维护58同城 编辑:程序博客网 时间:2024/06/03 21:51

安全点(Safepoint)

一次GC操作是一次地球停转事件(Stop the world event)。这个时候所有的用户进程都会等待GC操作的完成。所以如何才能保证进入GC操作是安全的,SafePoint的选定既不能太少以至于让GC等待的时间太长,也不能过于频繁以至于过分增大运行时的负荷。
如何选取安全点:
安全点的选择以程序“是否具有让程序长时间执行的特征”为标准进行选定的。这些特征是:方法的调用,循环的跳转,异常跳转,具有这些特征的指令才会产生SafePoint。

HotSpot的所有收集器

以下是基于JDK1.7 Update 14之后的HotSpot:
这里写图片描述
这里一共有7中不同的作用与不同分代的收集器,如果两个收集器之间存在连线,则表示它们可以搭配使用。属于新生代的收集器有(Serial,ParNew,Parallel Scavenge),属于老年代的收集器有(CMS,Serial Old, Parallel Old),

Serial收集器和Serial Old收集器

Serial收集器(新生代)

特点:一个单线程收集器。进行垃圾清理的时候必须暂停其他所有的工作线程,直到它的收集工作完成。(Stop the world event)
算法:复制算法
缺点:用户体验不好(因为Stop the world)。
优点:简单高效,对于单个CPU环境来说没有线程交互的开销。

Serial Old收集器(老年代)

特点:单线程收集器
算法:标记-整理
缺点:用户体验不好(因为Stop the world)。
优点:简单高效,对于单个CPU环境来说没有线程交互的开销。

示意图:

这里写图片描述

ParNew 收集器和Serial Old收集器

ParNew收集器(新生代)

特点:Serial的多线程版本,除了Serial之外只有它可以和CMS收集器配合使用
算法:复制算法

示意图:

这里写图片描述

Parallel Scavenge和Parallel Old收集器

特点:吞吐量优先组合
适用:注重吞吐量和CPU资源敏感的场合

Parallel Scavenge(新生代)

特点:吞吐量优先,多线程
算法:复制算法

Parallel Old(老年代)

特点:吞吐量优先,多线程
算法:标记-整理算法

示意图:

这里写图片描述

CMS收集器

特点:获得最短停顿时间
算法:标记-清除
步骤:

1:初始标记(CMS initial mark)--stop the world event2:并发标记(CMS concurrent mark)3:重新标记(CMS remark)--stop the world event 4:并发清除(CMS concurrent sweep)

主要缺点:
1:对CPU资源非常敏感。
2:无法实现处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致一次Full GC的产生。
3:基于“标记-清除”算法,会产生大量空间碎片。

示意图:

这里写图片描述