垃圾收集器

Posted jingpeng77

tags:

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

技术图片

 

 

并行和并发

  • 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
  • 并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行。而垃圾收集程序运行在另一个CPU上。

新生代收集器

Serial收集器

Serial(串行)收集器是最基本、发展历史最悠久的收集器,它是采用复制算法的新生代收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程,直至Serial收集器收集结束为止(“Stop The World”)。

ParNew 收集器

ParNew收集器就是Serial收集器的多线程版本,它也是一个新生代收集器

Parallel Scavenge 收集器

Parallel Scavenge收集器也是一个并行的多线程新生代收集器,它也使用复制算法。Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughput)。

老年代收集器

Serial Old收集器

Serial Old 是 Serial收集器的老年代版本,它同样是一个单线程收集器,使用**“标记-整理”(Mark-Compact)**算法。

Parallel Old收集器

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

CMS收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,它非常符合那些集中在互联网站或者B/S系统的服务端上的Java应用,这些应用都非常重视服务的响应速度。从名字上(“Mark Sweep”)就可以看出它是基于**“标记-清除”**算法实现的。

优点:CMS是一款优秀的收集器,它的主要优点在名字上已经体现出来了:并发收集、低停顿,因此CMS收集器也被称为并发低停顿收集器。

G1收集器

横跨整个堆内存,它是一款面向服务端应用的垃圾收集器。

通过把Java堆分成大小相等的多个独立区域,回收时计算出每个区域回收所获得的空间以及所需时间的经验值,根据记录两个值来判断哪个区域最具有回收价值,所以叫Garbage First(垃圾优先)。

总结

可以把收集器发展简单划分成四个阶段:

1、单线程阶段,对应收集器:Serial、Serial Old;

2、并行阶段,多条收集器线程,对应收集器:ParNew、Parallel Scavenge、Parallel Old;

3、并发阶段,收集器线程与用户线程同时运行,对应收集器:CMS(Concurrent Mark Sweep);

4、并行+并发+分区阶段,堆内存划分成多个小块进行收集,对应收集器:G1(Garbage First);

GC过程一定会发生STW(Stop The World),而一旦发生STW必然会影响用户使用,所以GC的发展都是在围绕减少STW时间这一目的。通过并行与并发已经极大的减少了STW的时间,但是STW的时间还是会因为各种原因不可控,而G1提供的一个最大功能就是可控的STW时间。

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

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

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

JVM之垃圾收集算法与垃圾收集器

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

G1垃圾收集器介绍

JVM垃圾收集器