在大多数情况下,如果您认为堆对于 Java 应用程序太小,就应该设置 mx 参数。通过在 Java 命令行上监视使用 verbosegc 参数运行的 JVM 的输出,您可以确定垃圾收集是否过于频繁。如果垃圾收集过于频繁,则请尝试增大堆的大小。
一般来说,如果应用程序不断出现内存不足错误,则我们建议您增大 mx 参数。这些错误可能是由于 Java 堆中可用空间不足而引起。
尽管设置堆大小没有规则可循,但下列原则可能会有所帮助:
- 不要使堆的增长超过系统的物理内存。换句话说,决不要将 mx 堆大小设置为大于 [(物理内存) - (操作系统和应用程序的工作区大小)]。另外,如果您运行多个 JVM,所有堆的大小总和应小于上述计算值。
- 如果应用程序需要的堆大于总物理内存的一半,则请设置 mx 参数。在 IBM Developer Kit for Windows,Java Technology Edition, 版本 1.1.8 中, mx 参数的默认值是总物理内存大小的一半。
- 如果您的应用程序经常依赖于终止函数 (finalizer) 的操作,则需要减小 mx 设置的大小。(注:我们建议您避免这种代码设计。)