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