刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!
这是一个单线程工作的收集器,这个单线程并不是只用一条线程完成垃圾回收的操作,而是在进行垃圾回收的时候,必须停掉其他所有的工作线程,直到它收集结束。

ParNew收集器实质上是Serial收集器的多线程并行版本,可以同时采用多条线程进行垃圾处理。

Parallel Scavenge收集器是一款新生代收集器,基于标记复制算法,能够并行收集。特点是其关注点和其他收集器不一样,它的目标是达到一个可控的吞吐量,而不是向CMS等收集器一样尽可能的缩短垃圾收集的时候用户线程的停止时间。

Serial Old收集器是Serial收集器的老年代版本,同样是一个单线程的收集器,使用标记-整理算法,有俩种用途:一是在JDK1.5以及之前的版本中与Parallel Scavenge收集器搭配使用;二是作为CMS收集器失败之后的后预案。

Parallel Old是Parallel Scavenge的老年代版本,支持并发收集,基于标记-整理算法实现。在注重吞吐量或者处理器资源较为稀缺的场合,优先选取Paralle Scavenge + Parallel Old的搭配方式。

CMS收集器是一种以获取最短停顿时间为目标的垃圾收集器。从名字上就可以看出CMS收集器是基于标记-清除法的垃圾收集器,运作过程要相对来说复杂一些,整个过程分为四个阶段:
总的来说,CMS收集器的内存回收是和用户线程是一起并发执行的。

CMS垃圾回收器主要有如下三个缺点:
G1回收器是一款主要面向服务端应用的垃圾回收器,JDK9之后,它替代了Parallel回收器。G1回收器可以面向堆内存中的任意地方来回收内存(Mix GC),没有被局限在新生代、老年代、和整堆回收中。
G1回收器中的基于Region的堆内存布局是实现上述目标的关键。G1将Java堆分为多个大小相等的独立区域(Region),每个Region都可以根据需要扮演新生代的Eden空间、Survivior空间以及老年代空间。Region中还有一个特殊的Humongos区域,用于存储大对象,当大对象的大小超过单个Region的时候,这个对象会被放在多个连续的Humongos Region中,G1会把这个区域当作老年代来处理。
G1收集器的新生代和老年代并不是固定的,他们都是一系列区域(不需要连续)的动态集合,G1进行垃圾回收的时候Region是垃圾回收的最小单元,每次收集的内存空间是G1的整数倍,有限回收收益最大的区域,能够让G1收集器在有限的时间内获取尽可能高的手机效率。
G1收集的过程大致分为以下四个步骤:

G1在整体上是基于标记整理算法实现的,但是从俩个Region来看,是基于标记复制算法,这俩种方法确保G1在垃圾回收的时候不会产生内存碎片。
本文链接:JVM垃圾回收器有哪些
版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!
