CMS初始标记需要800多毫秒,这是正常的吗?

时间:2014-03-03 13:05:03

标签: java garbage-collection

GC设置为:

最小,最大,总JVM大小(-Xms -Xmx)

JVM_SIZE="-Xms24g -Xmx24g"

新一代规模(-Xmn)

JVM_SIZE_NEW="-Xmn2g"

要使用的垃圾收集器类型

JVM_GC_TYPE="-XX:+UseConcMarkSweepGC -XX:+UseParNewGC"

调整上述垃圾收集器的选项

JVM_GC_OPTS="-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:SurvivorRatio=8 -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled"

对于CMS来说,24克可能太大了?

  

2014-03-03T19:34:10.687 + 0800:74.121:[GC [1 CMS-initial-mark:1431731K(23068672K)] 3170863K(24956160K),0.8289630 secs] [次:用户= 0.83 sys = 0.00,真实= 0.83秒]   应用程序线程停止的总时间:0.8294730秒

1 个答案:

答案 0 :(得分:0)

  

对于CMS来说,24克可能太大了?

这取决于你的业务,它是否需要那么多,或者它可以用少于24克。

然而,记忆由2个maim空间隔开,年轻和年老。这两个空格是单独收集的,因此要启用CMS,您需要使用‑XX:+UseConcMarkSweepGC

CMS将收集年轻人,如果它被填满或一段时间。并且有一些建议将年轻空间设置如下:

-XX:MaxNewSize=  -> this need to be 40% from your Xmx value
-XX:NewSize= -> this need to be 40% from your Xmx value

这将加快GC并使其更准确。这意味着旧的不会填补那么快(避免过早促销对象)。

也用于控制GC延迟,您可以使用:

–XX:CMSWaitDuration= -delay in ms-