【问题标题】:Does JVM use more than 1 garbage collector?JVM 是否使用超过 1 个垃圾收集器?
【发布时间】:2019-03-30 06:42:12
【问题描述】:

您好,根据此处的文档https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/concurrent.html#mostly_concurrent,热点 JVM 有 2 个并发收集器 - CMS 和 G1。那么在垃圾收集过程中,这两者是并行使用的还是只选择了一个?

【问题讨论】:

  • 更多的是关于这些垃圾收集器的工作方式:它们并行执行收集任务。
  • 所以你的意思是两者协同工作..?

标签: java


【解决方案1】:

不,它们不会同时运行。

事实上,CMS 和 G1 是可选的低暂停收集器。

您可以将 JVM 配置为使用 CMS、G1 或其他收集器之一;例如“stop-the-world”吞吐量收集器、Shenandoah (Java 12) (https://wiki.openjdk.java.net/display/shenandoah/Main)、Z GC (Java 12) 等等。

事实上,从 Java 9 开始,CMS 已被弃用,一些与 CMS 相关的 GC 标志组合已被删除。


一些术语可以帮助您理解。

  • 并行 GC 是指 GC 在运行时使用多个线程。
  • 并发 GC 是指 GC 与应用程序代码同时(即同时)运行。
  • 串联 GC ... 没有这样的东西。

一些收集器既是并发的又是并行的。

AFAIK,Java 收集器是 100% 并发的。所有所谓的并发收集器都有很短的时间段,此时所有应用程序线程都必须挂起。 (根据具体的 GC、调优选项和工作负载,这些暂停可能是 10 秒或 100 毫秒。这就是为什么 GC 被描述为“低暂停”而不是“无暂停”的原因。)

【讨论】:

  • 谢谢。我假设当我们没有明确传递任何 GC 参数时,默认 GC 将被用作此处的回答 - stackoverflow.com/a/43486993/3393469 如果有错误请纠正我。
  • 是的,你可以假设。 (这就是默认的意思!)注意,我没有检查那个答案的准确性,他没有说他是如何得出结论的/他的来源是什么。但是有 jvm 选项可以让 jvm 在启动时打印出所有活动设置,所以他可以使用它。
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 2021-05-25
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多