gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:00:43 25 4
gpt4 key购买 nike

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

示例情况:

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

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

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

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

最佳答案

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

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

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

JVM 会在最佳情况下使用您指定的可用内存。您可以指定一个较小的数量,例如 -Xmx768m 以保持它包含在内并且它可能运行良好,尽管您会增加在重负载情况下耗尽内存的风险。真正使用更少内存的唯一方法是编写使用更少内存的代码:)

关于java - 鼓励 JVM 进行 GC 而不是增加堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5355933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com