我一直在查看来自 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 默认值中“新”的 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}