我们要求总应用程序jvm内存太高并且根据输入数据集而变化。因此,我们不知道使用-Xmx命令行选项设置的最大堆大小。所需的总内存大于默认的最大堆大小(总物理内存的1/4)。
当我们没有提供任何GC人机工程学命令行参数时,内存在9-9.5 GB之后不会增长(系统中的总物理内存为38GB)。并且应用程序将在此时陷入困境。
如果我们将Xmx值赋予20 GB,则应用程序正在运行。但我们不确定最大堆大小值,因为它可以根据输入数据进行更改。 请告知如何处理此案件。我们有没有选择将堆内存增加到超出Xmx值?谢谢你的帮助。
答案 0 :(得分:2)
尝试将-Xmx与-Xms一起使用。为-Xms提供所需的最低值(20GB)和-Xmx以及操作系统的最大可能值。
答案 1 :(得分:0)
由于内存最初没有超过9-9.5GB,
将-Xms
设为9 GB
并设置 - Xmx
为maximum available physical memory - 1 or 2 GB
,如果没有其他进程正在运行(30 GB for 32 GB RAM machine
)
除了这些内存设置之外,您还可以微调垃圾收集算法。
如果CMS
和-Xms
具有相同的值,则 Xmx
有效。
对于较大的堆,G1GC
非常有效。您可以为最小和最大堆提供不同的值,如果您正确微调相关参数,它可以正常工作。
看看相关的SE问题:
Java 7 (JDK 7) garbage collection and documentation on G1
和