GC解释:收集器概述

当前版本的HotSpot JVM包括三种类型的垃圾收集器:

–串行收集器

–并行收集器

–多数同时收集者

它们都是世代的,这意味着它们利用了堆的划分方式

垃圾收集器负责三个主要操作:

–查找不再使用的对象

–释放这些对象之后的内存

–压缩堆

并非所有收集器都以相同的方式执行这些操作,因此让我们了解有关所有收集器的基本信息。 我们将在单独的文章中介绍细节。

串行收集器

顾名思义,该收集仅由一个线程执行。 在次要和完全GC期间都必须停止世界(STW)。

该收集器对年轻一代使用标记复制算法,而对老一代则使用标记清除紧凑算法进行清理。

串行GC专为单线程环境(通常是客户端类计算机)和较小的堆而设计。 可以通过-XX:+UseSerialGC标志启用它。

并行(吞吐量)收集器

Young集合由多个线程并行化,这使Minor GC更快。 结果,此收集器导致较短但更频繁的Young收集STW暂停。 从JDK 7u4开始,默认情况下还会由多个线程收集“旧世代”(并且还会导致世界停顿)。 在JDK 7u4之前,需要-XX:+UseParallelOldGC标志来启用旧一代的并行处理。 现在, -XX:+UseParallelGC-XX:+UseParallelOldGC标志都启用了吞吐量收集器,并同时处理了老一代和年轻一代。

该收集器还在Young Generation中使用mark-copy算法,在Old Generation中使用mark-sweep-compact,但是复制和压缩阶段均由多个线程执行。

要配置GC线程数,可以使用-XX:ParallelGCThreads=X标志。 默认值设置为CPU内核数。

什么时候使用并行GC是个不错的选择? 好吧,基本上,只要吞吐量比延迟更重要。

大多数同时收集者

它们被称为低暂停收集器-旨在最大程度地减少停顿的暂停并保持应用程序尽可能的响应

并发标记和扫描(CMS)

使用并行标记复制算法在多个线程中执行次要GC。 然后将停止所有应用程序线程。 老式服务器通常是同时收集的-当后台GC线程扫描老式服务器时,应用程序线程会暂停很短的时间。 Major GC期间使用的实际算法是并发标记扫描。 您可能已经注意到,“扫描”之后没有“压缩”。 没错–并发标记和清除是不会压缩使用权空间的收集器,因此内存可能会碎片化。 由于缺乏堆压缩,当GC无法将新对象放入内存时,JVM会回退到串行mark-sweep-compact算法以对旧一代进行碎片整理和压缩。 那就是性能下降的时候–所有应用程序线程都停止了,只有一个线程负责清理和压缩Tenured空间。

如前所述,CMS是低暂停收集器的一个示例。 这意味着当延迟是主要目标而不是吞吐量时,这是一个不错的选择-因为吞吐量可能由于CPU消耗的增加而降低(在应用程序线程运行时扫描堆不是免费的)。

-XX:+UseConcMarkSweepGC启用CMS收集器。 过去可以使用-XX:-UseParNewGC (单号“ UseParNewGC”之前的负号,因此使用此标志将禁用Parallel New(Young)GC)来配置具有单线程Young Generation集合的CMS,但已弃用在Java 8中已删除,在Java 9中已删除。

G1GC

垃圾优先(G1)是一种新的低中断垃圾收集器,旨在以最小的暂停处理大型堆。 堆分为固定大小的几个区域(同时仍保持堆的世代性质)。 这种设计使我们可以在处理整个“年轻一代”或“老一代”时摆脱长时间的STW暂停。 现在,可以分别收集每个区域,这将导致STW停顿时间更短但更频繁。 G1将对象从一个区域复制到另一个区域,这意味着堆至少已部分压缩。

G1使用mark-sweep-compact算法的增量版本。 可以通过指定-XX:+UseG1GC标志来启用它。

摘要

这是本文讨论的收集器的简单比较:

集电极 多个GC线程 STW(年轻一代) STW(老一代) 堆压实 首要目标
序列号 没有
平行 通量
内容管理系统 仅在扫描期间 没有 潜伏
G1 很短的 部分地 潜伏

还有一些其他垃圾收集器,但它们不是HotSpot JVM的一部分。 这些是:

  • C4(Azul Zing JVM)
  • 雪兰多
  • 平衡(IBM J9 JVM)

在Java 8中,服务器级计算机的默认GC是Parallel Collector。 G1GC在Java 9中将是默认的。默认情况下,客户端类计算机运行Serial Collector。

翻译自: https://www.javacodegeeks.com/2017/09/gc-explained-collectors-overview.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值