2010-12-10 50 views
21

我看到GC输出象下面这样:ParNew 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将停止所有线程。谢谢。

+1

出于好奇,你使用什么JVM,什么GC设置?即谁在添加时间戳,以及icms_dc从哪里来? – eckes 2012-05-02 16:49:33

回答

37

Jon Masamitsu's blog是这么说的很清楚

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

在你的例子中,时序是相当快,虽然

8

是,ParNew是一种“头痛医头的世界”集合中收集的年轻一代。由于年轻一代的规模通常很小,收集应该非常快,不应该太多地影响你的应用。

2

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

0

是它停了,这个世界,尽管这取决于你的堆大小和应用程序,貌似可以使用更大尺寸NEWGEN。你每分钟都在做一个小GC。较大的newGen大小并不一定意味着您的GC时间较短。虽然这样做的好处是,你不会推广即将死亡的对象,但当完成gc的时候,你将有更少的对象要移除,并减少停机时间。