我有一个执行 5 个不同任务的 java 程序。当我使用 -Xmx512m 内存参数运行程序时,任务 1-4 运行正常,但任务 5 内存不足。当我使用 -Xmx1024m 运行程序时,所有 5 个任务都运行良好,但之前使用 512m 堆运行良好的任务 1-4 现在几乎用完了所有 1024m 堆。如果我使用 -Xms128m -Xmx1024m,也会发生同样的事情。
指示 JVM 保持低内存利用率(例如任务 1-4 为 512m)并且仅在实际需要时使用更多内存(例如任务 5)的内存参数是什么?
也许我需要一种比默认设置更频繁地激活垃圾收集器的方法?
最佳答案
这两个参数提示jvm何时需要调整其堆大小:
-XX:MaxHeapFreeRatio=10
-XX:MinHeapFreeRatio=10
这几乎意味着如果在 gc 之后,超过 10% 的堆是空闲的,它会尝试将内存还给操作系统。并且只有在 gc 之后使用了超过 90% 的堆时,它才会增长堆。
这可能会减慢您的程序,因为 gc 会不断更改分配的内存大小。如果您的程序在短时间内分配大量内存,它可能根本没有效果。
关于java - 如何指示 JVM 尽可能减少内存占用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11123268/