JVM虚拟机之垃圾收集器

前述

JVM虚拟机中的GC是其重要的一环,而GC中关键在于不同垃圾收集器的实现。

一、Serial收集器

它是一个单线程的收集器,单线程的意义不仅仅在于它只会使用一个CPU和一个收集线程去完成垃圾收集工作,更重要的是它在进行垃圾回收的时候,必须暂停其他所有的工作线程,直到它收集结束;

新生代采用复制算法暂停所有用户线程,老年代采用标记-整理算法暂停所有用户线程;

直到现在它依然是虚拟机运行在client模式下的默认新生代收集器;

优点:
简单高效(与其他收集器的单线程相比),对于限定单个CPU的环境来讲,serial由于没有线程交互的开销,专心做垃圾收集自然获得高的收集效率;

二、ParNew收集器

其实就是Serial收集器的多线程版本;

除了使用多条线程进行垃圾收集,其余行为包括Serial收集器所有控制参数、收集算法、对象配规则、回收策略;

它是许多运行在server模式下的虚拟机中首选的新生代收集器,因为除了Serial收集器,只有它能够和CMS收集器配合工作;

三、Parallel Scavenge收集器

它是一个新生代收集器;

该收集器的关注点是不一样的,CMS等收集器它们的关注点是如何降低停顿时间,而Parallel Scavenge收集器它关注于达到一个可控制的吞吐量,所谓 吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间);

停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能够提升用户体验,而高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务;

它有一个自适应调节策略,它会去动态的调整这些参数已达到最合适的停顿时间和吞吐量;

四、Serial Old收集器

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

两大用途:
1、在JDK1.5之前的版本中与Parallel Scavenge收集器搭配使用;
2、作为CMS收集器的后备预案;

五、Parallel Old收集器

它是Parallel Scavenge收集器的老年代版本,使用多线程+“标记-整理”算法;

之前的Parallel Scavenge收集器一直处于尴尬的位置,如果新生代采用Parallel Scavenge收集器,那么老年代只能使用Serial Old收集器(因为Parallel Scavenge收集器不能与CMS收集器搭配使用),但是它的服务应用性能太差;

六、CMS收集器

CMS收集器是以获取最大回收停顿时间为目标的收集器;并发收集、低停顿

它是基于“标记-清除“算法实现的,但是相对复杂一些,它分为4个步骤:

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除

初始标记和重新标记都需要“Stop the World”,初始标记是标记一下GC Roots能直接关联到的对象;
重新标记是为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段时间更长一些,但是远比并发标记的时间短;
并发标记和并发清除都是和用户线程一起运作的;

CMS的三个缺点:

  1. 它对CPU资源非常敏感,在并发阶段,它虽然不会导致用户线程停顿,但是会因为占用了一部分线程而导致应用程序变慢,总吞吐量会降低。CMS默认启动的回收线程数是(CPU数量+3)/ 4,也就是说当CPU在4个以上时,不少于25%的CPU资源;
  2. CMS无法处理浮动的垃圾。由于CMS并发清理时,用户线程还在运行,自然就会有新的垃圾出现,这一部分的垃圾出现在标记之后,CMS无法在当此收集中处理掉它们,只好等待下次GC时清理,这一部分垃圾就是“浮动垃圾”;因此不能像其他收集器那样等到老年代几乎被占满了才去收集,需要预留一部分空间提供并发收集时的程序运作使用;
  3. 它是基于标记-清除的算法,所以会出现大量的空间碎片。
七、G1收集器

G1是面向服务端应用的垃圾收集器。

G1的特点:

  • 并行与并发:能充分利用多CPU、多核环境下的硬件优势,使用多个CPU来缩短Stop-The-World停顿时间;
  • 分代收集:采用不同的方式去处理新创建的对象和存活了一段时间的对象;
  • 空间整合:G1整体上是采用“标记-整理”算法实现的收集器,从局部上看是基于复制算法实现的;
  • 可预测的停顿:G1除了追求低停顿外,还能建立可预测的停顿事件模型,能够让使用者明确指定在一个长度为M毫秒的时间段内,消耗在垃圾回收上的时间不超过N毫秒;

G1收集器不在分新生代和老年代,它将整个Java堆划分为多个大小相等的独立区域(Region);G1跟踪各个Region里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region,这种使用Region划分内存空间以及有优先级的区域回收方式,保证了G1收集器在有限的时间内可以获取尽可能高的收集效率;

G1收集器的运作步骤:

  • 初始标记
  • 并发标记
  • 最终标记
  • 筛选标记

它的运作步骤和CMS收集器是差不多的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值