【问题标题】:ParNew gc will stop the world?ParNew gc 会阻止世界吗?
【发布时间】:2013-03-02 06:07:44
【问题描述】:

我看到如下 GC 输出:

2010-12-10T16:00:44.942+0800: 1443.562: [GC 1443.562: [ParNew: 201856K->17318K(201856K), 0.0352970 secs] 2113334K->1949037K(4416748K) icms_dc=0 , 0.0354310 secs] [Times: user=0.12 sys=0.00, real=0.04 secs]
2010-12-10T16:00:46.207+0800: 1444.827: [GC 1444.827: [ParNew: 196774K->22400K(201856K), 0.0119290 secs] 2128493K->1954446K(4416748K) icms_dc=0 , 0.0120560 secs] [Times: user=0.13 sys=0.00, real=0.02 secs]
2010-12-10T16:00:47.562+0800: 1446.182: [GC 1446.182: [ParNew: 201856K->22400K(201856K), 0.0714350 secs] 2133902K->1982695K(4416748K) icms_dc=0 , 0.0715720 secs] [Times: user=0.23 sys=0.01, real=0.07 secs]
2010-12-10T16:00:48.545+0800: 1447.165: [GC 1447.165: [ParNew: 201856K->22400K(201856K), 0.1457230 secs] 2162151K->2008418K(4416748K) icms_dc=0 , 0.1458710 secs] [Times: user=0.71 sys=0.05, real=0.15 secs]

我想知道 ParNew GC 是否会停止所有线程。谢谢。

【问题讨论】:

  • 出于好奇,你使用了什么JVM,什么GC设置?即谁在添加时间戳,icms_dc 来自哪里?
  • 您可以通过 Sun JVM v6 使用以下选项获得此输出:-XX:+UseConcMarkSweepGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:PATH_TO_A_FILE

标签: java garbage-collection


【解决方案1】:

Jon Masamitsu's blog说的很清楚

“ParNew”是一个停止世界,复制 使用多个 GC 的收集器 线程。

在您展示的示例中,时间安排相当快

【讨论】:

    【解决方案2】:

    是的,ParNew 是一个收集年轻一代的“stop-the-world”集合。由于新生代通常规模较小,因此收集应该非常快,并且不会对您的应用程序造成太大影响。

    【讨论】:

      【解决方案3】:

      是的,它是停止世界。在您的示例中,您将在方括号内看到暂停时间。它通常与实时相同。用户? time 是在 GCing 中花费的实际 CPU 时间。使用并行性时,它可能比实时大得多。在您的情况下,它看起来像 4 个 GC 线程。

      【讨论】:

        【解决方案4】:

        是的,它停止了,虽然取决于您的堆大小和应用程序,但看起来您可以使用更大的 newGen 大小。您每分钟都在进行次要 GC。较大的 newGen 大小并不一定意味着您将有较长的次要 GC 时间。虽然这样做的好处是您不会将很快会死掉的对象提升到老一代。当需要完整的 gc 时,您要删除的对象会更少,停机时间也会更少。

        【讨论】:

          猜你喜欢
          • 2012-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多