2010-12-10 86 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的時候,你將有更少的對象要移除,並減少停機時間。