CG太早开始收集垃圾了

时间:2019-05-16 19:30:38

标签: garbage-collection jvm heap

我有6g堆,而gc总是在〜4.5g堆负载下开始工作。 现在,我设置了-Xmx20g(堆大小为20 GB)和-Xms16g(初始堆大小为16 GB),但是像以前一样,GC在〜4.5g内存下激活。 为什么,以及如何强制gc使用所有这些内存? GC是标准配置。 Java 8。 enter image description here

2 个答案:

答案 0 :(得分:0)

也许您应该尝试使用-Xms20G和-Xmx20G以避免调整大小。重要的是,每次调整JVM大小时,都会执行完整的GC,因此避免此过程是减少完整垃圾收集数量的好方法。

请阅读

“当Hotspot JVM启动时,堆,年轻代和烫发代空间分别分配给它们的初始大小,这些初始大小分别由-Xms,-XX:NewSize和-XX:PermSize参数确定,并递增为-所需的最大保留大小,即-Xmx,-XX:MaxNewSize和-XX:MaxPermSize。如果内存的使用量不需要最初指定的那么多,JVM也会在运行时缩小实际大小。会触发垃圾回收(GC),因此会影响性能。作为最佳实践,我们建议您将初始大小和最大大小设为相同”。

来源:http://www.oracle.com/us/products/applications/aia-11g-performance-tuning-1915233.pdf

如果您可以提供gc.log,则彻底分析此情况将很有用。

最好的问候,RCC

答案 1 :(得分:0)

真的!问题出在伊甸园空间。它已在-Xms16g上自动设置为6Gb。 我分析到我的应用程序具有较小的长寿命对象,因此我将edem调整为16g,最大堆调整为20g,并且GC激活的频率降低了。 enter image description here

enter image description here