gpt4 book ai didi

java - 如何缩小java堆空间?

转载 作者:IT王子 更新时间:2023-10-28 23:38:21 25 4
gpt4 key购买 nike

我有一个使用 DOM 处理大型 xml 文件的 Java 控制台应用程序。基本上,它根据从数据库中获取的数据创建 xml 文件。现在,正如您猜测的那样,它正在使用大量内存,但令我惊讶的是,它与错误代码无关,而是与“java 堆空间不缩小”有关。我尝试使用这些 JVM 参数从 Eclipse 运行我的应用程序:

-Xmx700m -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20

我什至添加了

-XX:-UseSerialGC

我发现并行 GC 会忽略“MinHeap”和“MaxHeap”选项。即使我的应用程序内存使用的所有这些选项图看起来像这样: java app graph

如您所见,在某一时刻,我的应用程序占用了 ~400 MB 的堆空间,堆增长到 ~650 MB,但几秒钟后(当 xml 生成完成时)我的应用程序下降到 12MB 的已用堆空间,但是“堆大小”保持在 ~650 MB。它需要 650 MB 的内存!这很奇怪,你不觉得吗?

**有没有办法强制 JVS 将可用堆大小缩小到当前使用堆的 150%?**例如,如果我的应用需要 15 MB 内存,当我的应用询问时,堆大小约为 20MB对于 400 MB 的 ram,一旦我的应用完成繁重的操作,堆就会增长到 ~600 MB 并且 DROPS 会恢复到 ~20 MB?

最佳答案

您可能应该使用并行收集并使用 -XX:-UseAdaptiveSizePolicy。文档适用于 Java 1.5,但我找不到更新的内容。

The implementation of -XX:+UseAdaptiveSizePolicy used by default with the -XX:+UseParallelGC garbage collector has changed to consider three goals:

  • a desired maximum GC pause goal
  • a desired application throughput goal
  • minimum footprint

The implementation checks (in this order):

  1. If the GC pause time is greater than the pause time goal then reduce the generations sizes to better attain the goal.
  2. If the pause time goal is being met then consider the application's throughput goal. If the application's throughput goal is not being met, then increase the sizes of the generations to better attain the goal.
  3. If both the pause time goal and the throughput goal are being met, then the size of the generations are decreased to reduce footprint.

编辑

根据 OP 的建议添加了“-”。

关于java - 如何缩小java堆空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22480749/

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