jvm达到Xmx选项设置的最大堆大小后,如何配置JVM堆内存大小增加

How to configure the JVM heap memory size to be increased after jvm reached the maximum heap size set by the Xmx option

我们有一个要求,其中总应用程序 jvm 内存太高并且根据输入数据集而变化。所以我们不知道使用 -Xmx 命令行选项设置的最大堆大小。所需的总内存大于默认的最大堆大小(总物理内存的 1/4)。

当我们不提供任何 GC ergonomics 命令行参数时,内存在 9-9.5 GB(系统中的总物理内存为 38GB)后不会增长。应用程序会在此时卡住。

如果我们将 Xmx 值设为 20 GB,则应用程序为 运行。但是我们不确定最大堆大小值,因为它会根据输入数据而变化。 请告知在这种情况下如何进行。我们是否可以选择将堆内存增加到 Xmx 值以上?感谢您的帮助。

尝试将 -Xmx 与 -Xms 一起使用。为 -Xms 提供所需的最小值 (20GB),并为 -Xmx 提供适用于您的操作系统的最大可能值。

由于内存最初不会增长超过 9-9.5GB,

设置-Xms为9GB

并设置 -Xmxmaximum available physical memory - 1 or 2 GB 如果没有其他进程是 运行 ( 30 GB for 32 GB RAM machine )

除了这些内存设置之外,您还可以微调垃圾收集算法。

如果 -XmsXmx 具有相同的值,则

CMS 有效。

对于较大的堆,G1GC 非常有效。您可以为最小堆和最大堆设置不同的值,如果您适当地微调相关参数,它就可以正常工作。

看看相关的SE问题:

Java 7 (JDK 7) garbage collection and documentation on G1

Selecting a collector article