新一代产能不增加

时间:2014-12-29 07:54:10

标签: java garbage-collection heap-size

我一直在查看jstat(-gc选项)中的日志,发现我们的应用程序花费了大量时间进行新一代收集。

我们将最大堆大小设置为16gigs(无最小值)。

这些是根据jstat日志的初始容量:

S0C:2112 S1C:2112 EC:17024 OC:63872

在整个剩余的时间里,尽管我们似乎有大量的新一代活动并且花费了大量时间,但S0C,S1C,EC都没有增加。然而,旧容量增加了。

我通过设置-XX:NewSize = 6G在UAT中进行了比较测试,并且应用程序执行得更好(很少有新一代事件,而且整体GC的时间也少得多)

我的问题是:为什么新一代产能不会随着我们的原始设置而增加?是否期望我最初必须分配更多内存?

我们正在使用JVM Hotspot 1.6。

这是来自JVM默认值的'New'的grep:

uintx MaxNewSize                                = 18446744073709486080{product}
intx NewRatio                                  = 2               {product}
uintx NewSize                                   = 1310720         {product}
uintx NewSizeThreadIncrease                     = 5320            {pd product}
intx PartialPeelNewPhiDelta                    = 0               {C2 product}
bool UseNewLongLShift                          = false           {product}
bool UseParNewGC                               = false           {product}

1 个答案:

答案 0 :(得分:0)

我对热点1.6上的CMS人机工程学还不太了解,但如果你想让热点动态移动年轻一代的边界,你可能必须启用自适应大小调整策略并调整相关选项。

或者升级到更新的JVM并尝试使用G1GC,它肯定支持自适应大小调整。

CMS可能也没有使用新一代的完整可用尺寸,因为否则它无法满足其某些目标,例如:小gc暂停时间目标。确保它为新一代使用多线程GC,而不是串行GC。

我建议启用详细的GC日志记录,并查看它为次要世代所做的工作。