Java 新一代发电能力不增加

Java 新一代发电能力不增加,java,garbage-collection,heap-size,Java,Garbage Collection,Heap Size,我一直在查看来自jstat(-gc选项)的日志,发现我们的应用程序正在花费大量时间进行新一代收集 我们已将最大堆大小设置为16gigs(无最小值) 根据jstat日志,这些是初始容量: S0C:2112 S1C:2112 欧共体:17024 主管:63872 在一天剩下的时间里,S0C、S1C、EC都没有增加,尽管我们似乎有大量的新一代活动,并且花了很多时间去做。然而,旧容量增加了 通过设置-XX:NewSize=6G,我在UAT中运行了一个比较测试,应用程序的性能要好得多(新一代事件很少,在G

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

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

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

S0C:2112 S1C:2112 欧共体:17024 主管:63872

在一天剩下的时间里,S0C、S1C、EC都没有增加,尽管我们似乎有大量的新一代活动,并且花了很多时间去做。然而,旧容量增加了

通过设置-XX:NewSize=6G,我在UAT中运行了一个比较测试,应用程序的性能要好得多(新一代事件很少,在GC中的时间也少得多)

我的问题是:为什么新一代的容量没有随着我们原来的设置而增加?是否期望我最初必须分配更多内存

我们使用的是JVM热点1.6

以下是JVM默认值中“新建”的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}

我对hotspot 1.6上的CMS工效学还不是很确定,但如果您希望hotspot动态移动年轻一代的边界,可能必须启用自适应大小调整策略并调整相关选项

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

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


我建议启用详细GC日志记录,并查看它对小代的作用。

您使用的是哪些GC设置?大小调整策略取决于所使用的GC实现。可能通过-XX:+PrintFlagsFinal转储设置:-Xmx16384M-XX:+UseConMarkSweepGC