何时选择SerialGC,基于CMS的ParallelGC,Java中的G1?

问题描述 投票:6回答:3

在Java 9中,G1 GC是默认的垃圾收集器。截至目前,我听说G1GC上的some people preferring CMS garbage collector似乎不稳定,并且存在一些令人讨厌的错误。

ParallelGC发生了什么事(最近没有嗡嗡声?有没有什么用例比起CMS / G1,我们更希望使用ParallelGC?

而且,在任何情况下SerialGC都可以执行所有这些并行收集器吗?

java garbage-collection jvm
3个回答
6
投票

串行收集器

主要用于单CPU机器。

算法:

它使用单个线程来处理堆,并在任何gc期间执行世界暂停。只是将其视为玩具。

这是客户端类计算机的默认设置(Windows或单CPU计算机上的32bit jvm)>。


平行收集器

算法:

它使用多个gc线程来处理堆,并在任何gc期间执行世界停顿暂停。

<= Java 8,这是服务器级计算机(多CPU类的Unix计算机或任何64位jvm)的默认设置。


CMS收集器

旨在消除与并行和串行收集器的完整gc相关的长时间停顿。

算法:

它使用1个或多个gc线程来定期扫描旧的一代,并丢弃未使用的对象,暂停时间很短,但是使用了更多的cpu时间。


G1收集器

这是低暂停/服务器风格的gc,主要用于大堆(> 4Gb)。

算法:

  • 与CMS类似,它使用多个后台gc线程扫描并清除堆。
  • 将老一代分成几部分,可以将老一代从一个部分复制到另一个。因此,碎片化的可能性较小。
  • 由于Java 9,这是服务器级计算机(多CPU类的Unix计算机或任何64位jvm)的默认设置。


为什么默认使用G1?

主要原因是减少gc暂停时间,尽管可能会降低整体吞吐量。



0
投票

使用序列号:-只有1个CPU可用,没有暂停要求-一台机器上存在小型JVM(超过CPU数量)-小型实时数据集(小于100MB)

© www.soinside.com 2019 - 2024. All rights reserved.