JVM垃圾收集器总结

来源:互联网 发布:关于品质数据的口号 编辑:程序博客网 时间:2024/05/17 04:17

JVM垃圾收集器总结

JVM垃圾收集器实现了垃圾收集的具体实现过程,不同的厂商对应于不同的垃圾收集器实现。并且会提供参数选择供用户根据自己的使用特点和要求来组合各个年代所使用的收集器


商业虚拟机具体有以下几种常用收集器:

这里写图片描述

现代成熟的商业虚拟机都采用分代思想进行垃圾回收,针对java堆中不同区域的对象的生命周期,存活时间的不同采用不同的收集器进行处理.

针对新生代中对象”朝生夕死”的特点,采用复制算法进行大面积回收,而针对老年代里对象生命周期较长的特点一般采用“标记–清除算法”或者“标记–整理算法”。

Serial 收集器

Serial
连续的; 连载的; 顺序排列的; 分期偿付的


Serial收集器是最基本,发展时间最长的收集器,曾经是新生代收集器的唯一选择。这个收集器采用”单线程”垃圾收集处理。同时更重要的是在进行垃圾收集的过程中,必须暂停其他所有的工作线程,直到它收集结束。

其中的“Stop The World”状态,带给用户非常不好的体验。之所以说这个是最基本的收集器是因为后来发展的收集器都是在减少或消除因内存回收而带来的工作线程的停顿

工作过程如下图:

这里写图片描述

到现在为止Serial依然是运行在Client模式下的默认新生代收集器,简单高效。


ParNew收集器

Parallel
adv. 平行地,并列地;


ParNew收集器是是Serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括控制参数,收集算法,Stop The World,对象分配规则,回收策略等都与Serial收集器完全一样。

除了Serial收集器,目前只有它能与CMS收集器(一款真正意义上的”并发”收集器)配合工作
单CPU环境下ParNew不会比Serial后机器有优势,由于存在线程交互的开销,并不能保证在两个CPU环境下一定超过Serial收集器。

工作过程如下图:

这里写图片描述


Serial Old 收集器


Serial Old收集器是Serial收集器的老年代版本,同样是一个单线程收集器,使用”标记–整理”算法。

可以作为CMS收集器的后备预案,在并发收集发生”Concurrent Mode Failure”时使用。

工作过程如下图:

这里写图片描述


Parallel Old 收集器


Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程和”标记–整理”算法。

Parallel Old收集器的出现后,”吞吐量优先”收集器终于有了比较实用的组合,在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器。

工作过程如下图:

工作过程


Parallel Scavenge收集器(吞吐量优先)


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


Parallel Scavenge收集器是也是复制算法收集器,同时是并行处理,其特点在于它关注的是目标是达到一个可控制的吞吐量。而其他收集器是关注尽可能地缩短GC时用户线程的停顿时间。

Parallel Scavenge收集器同时提供了参数用于精确控制吞吐量

工作过程如下图:

工作过程


CMS收集器


CMS(Concurrent Mark Sweep)收集器是一种获取最短回收停顿时间为目标的收集器。使得应用响应速度快,并减少停顿时间,基于这一特点CMS收集器比较符合服务端的应用。


CMS是基于”标记–清除”算法实现的,其运作过程较为复杂。整个过程分为以下步骤:
1. 初始标记(用户线程停顿,耗时较短)
2. 并发标记(与用户线程并发执行,耗时长)
3. 重新标记(用户线程停顿,耗时较短)
4. 并发清除(与用户线程并发执行,耗时长)

总体来说,CMS的收集过程是与用户程序并发执行的.

工作过程如下图:

这里写图片描述


G1收集器(Garbage-First)


G1收集器是一款面向服务端应用的收集器,技术水平很高,性能优异。


与其他收集器相比,G1具有以下明显的特点
1. 并发,并行 充分利用CPU等环境资源,缩短停顿时间,可以通过并发执行使java程序继续运行
2. 分带收集 G1不需要配合其他收集器就可以独立管理整个GC堆,同时采用不同的方式对待不同区域的对象
3. 空间整合
4. 可预测的停顿,可完成定时GC计划

G1整个回收过程分为以下步骤:
1. 初始标记(用户线程停顿,耗时较短)
2. 并发标记(与用户线程并发执行,耗时长)
3. 最终标记(用户线程停顿,耗时较短)
4. 筛选回收(用户线程停顿,根据要求选择Region进行处理)

工作过程如下图:

这里写图片描述

0 0
原创粉丝点击