标签:因此 复制算法 用户 新生代 垃圾收集 pac 响应 收集器 堆内存
并行和并发
Serial(串行)收集器是最基本、发展历史最悠久的收集器,它是采用复制算法的新生代收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程,直至Serial收集器收集结束为止(“Stop The World”)。
ParNew收集器就是Serial收集器的多线程版本,它也是一个新生代收集器
Parallel Scavenge收集器也是一个并行的多线程新生代收集器,它也使用复制算法。Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughput)。
Serial Old 是 Serial收集器的老年代版本,它同样是一个单线程收集器,使用**“标记-整理”(Mark-Compact)**算法。
Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程和**“标记-整理”算法。
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,它非常符合那些集中在互联网站或者B/S系统的服务端上的Java应用,这些应用都非常重视服务的响应速度。从名字上(“Mark Sweep”)就可以看出它是基于**“标记-清除”**算法实现的。
优点:CMS是一款优秀的收集器,它的主要优点在名字上已经体现出来了:并发收集、低停顿,因此CMS收集器也被称为并发低停顿收集器。
横跨整个堆内存,它是一款面向服务端应用的垃圾收集器。
通过把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时间。
标签:因此 复制算法 用户 新生代 垃圾收集 pac 响应 收集器 堆内存
原文地址:https://www.cnblogs.com/jingpeng77/p/12900559.html