垃圾收集器(垃圾收集算法的实现)

Posted Carl_Hugo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了垃圾收集器(垃圾收集算法的实现)相关的知识,希望对你有一定的参考价值。

Serial收集器

单线程垃圾收集器,在其进行垃圾收集的时候需要暂停其他的线程。
Serial收集器是Client模式下的默认新生代垃圾收集器。

ParNew收集器

Serial收集器的多线程版本,是Server模式下默认新生代垃圾收集器。

Parallel Scavenge收集器

新生代垃圾收集器 ,使用的算法是复制算法,也是并行多线程收集器。和ParNew的区别是,ParallelScavenge收集器更关注可控制的吞吐量。(吞吐量=运行用户代码的时间/(运行用户代码的时间+垃圾收集时间))

Parallel Scavenge 收集器使用两个参数控制吞吐量:

-XX:MaxGCPauseMillis 控制最大的垃圾收集停顿时间,
-XX:GCRatio 直接设置吞吐量的大小。

Serial Old收集器

是Serial收集器的老年代版本,也是个单线程收集器,采用“标记-整理算法”进行回收。

Parallel Old收集器

是 Parallel Scavenge 收集器的老年代版本,使用多线程和“标记-整理算法”进行垃圾回收。通常与Parallel Scavenge配合使用。

CMS(Concurrent Mark Sweep)

标记清除法,对老年代进行回收。
CMS过程
1.初始标记:这个阶段需要虚拟机停顿正在执行的任务,从垃圾回收的根对象开始,只扫描能够和根对象直接关联的对象并做标记。
2.并发标记:在初始标记的基础上继续向下追溯标记,并发标记阶段,应用程序的线程和并发标记的线程并发执行。
3.并发预清理:并发预清理阶段仍然是并发的,在这个阶段虚拟机查找在执行并发标记阶段新进入老年代的对象。通过重新扫描减少下一个阶段“重新标记”的工作。
4.重新标记:这个阶段会暂停虚拟机,收集器线程扫描在CMS中剩余的对象,扫描从根对象开始向下追溯,并处理对象关联。
5.并发清理:清理垃圾对象,这个阶段收集器线程和应用程序线程并发执行。
6.并发重置:这个阶段,重置CMS收集器的数据结构,等待下一次垃圾回收。

CMS缺陷:
标记清除法会产生空间碎片。
线程和应用程序线程并行执行,这样会需要更多的CPU。
CMS在回收完堆空间之前还有空间分配给正在运行的应用程序,必须预留一部分空间。也就是说CMS不会在老年代满的时候才开始收集,默认当老年代使用68%的时候,CMS就开始行动了。
总的来说CMS回收器减少了回收的停顿时间,降低了堆空间的利用率。

CMS使用场景
对应用程序停顿敏感,但能够提供较大内存和更多CPU的场景。

G1(Garbage First)

G1长期目标是取代CMS,G1比CMS改进的地方:
1. G1是压缩型收集器,G1通过有效的压缩避免了对于细微空闲内存空间的分配,消除了空间碎片的问题。
2. G1的垃圾收集停顿比CMS容易估计,允许用户自定义停顿参数。

上一代垃圾收集器将堆内存划分为固定大小的三个部分,年轻代、老年代和持久代。

G1收集器将内存划分为多个大小相等的heap区。G1中各代的heap区不像老一代垃圾收集器一样要求各部分是连续的。

G1年轻代收集

  1. 将堆一整块内存空间分为多个heap区(regions)。此外,还有第四种类型,被称为巨型区域(Humongous Region)Humongous 区域是为了那些存储超过 50% 标准 region 大小的对象而设计。
  2. 年轻代内存由一组不连续的regions区组成,方便容量调整。
  3. 年轻代的垃圾收集会有stop the world事件。
  4. 年轻代GC通过多线程并行执行。
  5. 存活的对象被拷贝到新的survivor区或者老年代。

G1老年代收集

  1. 并发标记清理阶段
    1.1 活跃度信息在程序运行的时候被并行计算出来
    1.2 活跃度信息标致出哪些区域在转移暂停期间最适合回收
    1.2 不像CMS有清理阶段

  2. 再次标价阶段
    2.1 使用Snapshot-at-the-Beginning算法比CMS所用的算法要快的多
    2.2 完全空的区域直接被回收

  3. 拷贝/清理阶段
    3.1 年轻代和老年代同时进行回收
    3.2老年代的选择基于其活跃度

以上是关于垃圾收集器(垃圾收集算法的实现)的主要内容,如果未能解决你的问题,请参考以下文章

JVM笔记-HotSpot的算法细节实现

深入浅出CMS垃圾收集器

垃圾收集器二

垃圾收集器

JVM垃圾收集—垃圾收集器及常见组合参数

垃圾收集器-CMS、三色标记、记忆集