鼓励 JVM 进行 GC 而不是增加堆?

2023-12-23

(请注意,当我说“JVM”时,我真正的意思是“热点”,并且我正在运行最新的 Java 1.6 更新。)

示例情况:

我的 JVM 正在运行,-Xmx 设置为 1gb。目前,堆已分配 500mb,其中 450mb 已使用。该程序需要在堆上再加载 200 MB。目前,堆中有 300mb 的“可收集”垃圾(我们假设它们都在最老的一代中。)

在正常操作下,JVM 会将堆增长到 700 MB 左右,并在达到该值时进行垃圾收集。

在这种情况下,我希望 JVM 首先进行 gc,然后分配新的东西,这样我们最终的堆大小将保持在 500mb,已用堆大小为 350mb。

是否有一个 JVM 参数组合可以做到这一点?


你可以尝试指定-XX:MinHeapFreeRatio and -XX:MaxHeapFreeRatio控制堆的扩展和收缩:

  • -XX:MinHeapFreeRatio- 当一代中的可用空间百分比低于此值时,该一代将扩展以满足此百分比。默认值为 40。
  • -XX:MaxHeapFreeRatio- 当一代中的可用空间百分比超过此值时,该一代将缩小以满足此值。默认值为 70。

您可能还想通过指定来尝试并发 GC-XX:+UseConcMarkSweepGC。根据您的应用程序,它可以以额外的 CPU 周期为代价来保持较低的堆大小。

否则,JVM 将在最佳情况下使用您指定的可用内存。您可以指定较低的金额,例如-Xmx768m保持它的控制,它可能会运行良好,尽管您会增加在重负载情况下耗尽内存的风险。实际上,总体上使用更少内存的唯一方法是编写使用更少内存的代码:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

鼓励 JVM 进行 GC 而不是增加堆? 的相关文章

随机推荐