gpt4 book ai didi

java - 在 Java 中什么时候选择 SerialGC、ParallelGC 而不是 CMS、G1?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:37:36 25 4
gpt4 key购买 nike

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

ParallelGC 发生了什么(这些天没有嗡嗡声)?有没有我们更喜欢 ParallelGC 而不是 CMS/G1 的用例?

此外,是否存在 SerialGC 可以执行所有这些并行收集器的情况?

最佳答案


串行收集器

主要针对单cpu机器。

算法:

它使用单线程处理堆,并在任何 gc 期间执行 stop-the-world 暂停。只是把它当作玩具。

这是客户端类机器的默认设置(Windows 或单 CPU 机器上的 32 位 jvm)


并行收集器

算法:

它使用多个 gc 线程来处理堆,并在任何 gc 期间执行 stop-the-world 暂停。

<= Java 8,这是服务器类机器(多 cpu 类 unix 机器或任何 64 位 jvm)的默认值。


内容管理系统收集器

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

算法:

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

警告:自 Java 14 起,它已被删除


G1收集器

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

算法:

  • 类似于CMS,它使用多个后台gc线程来扫描和清除堆。
  • 它将老年代分成几部分,它可以通过从一部分复制到另一部分来清理老年代。
    因此,不太可能出现碎片化。

从 Java 9 开始,这是服务器类机器(多 cpu 类 unix 机器或任何 64 位 jvm)的默认设置。


为什么默认使用G1?

主要是为了减少 gc 暂停时间,虽然整体吞吐量可能会降低。

关于java - 在 Java 中什么时候选择 SerialGC、ParallelGC 而不是 CMS、G1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com