基本上,我们已经注意到,在一些计算机上设置JVM选项-Xmx(最大堆大小)有时会导致JVM无法初始化,即使系统上有足够的RAM。
例如,在4GB的机器上,我们有-Xmx 1024 m,它失败了,但-Xmx 800 m工作。我可以理解在1GB的机器上,甚至是2GB的机器上,但在4GB的机器上,特别是考虑到Windows、Linux等可以交换RAM,为什么会失败?
我已经看到了很多线程和问题说,以减少您的最大堆大小,但没有人可以解释为什么它失败,这是我真正寻找的。
还有,你怎么说消耗尽可能多的内存,你想要达到一定的大小呢?
2条答案
按热度按时间ntjbwcob1#
这有可能是由于virtual address space fragmentation的原因。根据DLL的加载地址、线程的堆栈位置、不可移动的本机内存分配、内核保留的地址等,为堆的最大潜在大小保留 * 连续 * 1024MB的地址范围可能是不可能的,尤其是在32位进程中。
h4cxqtbf2#
I came across this issue a while ago with Windows XP。在大多数XP机器上,我可以分配1400MB,而其他机器只能分配1200MB。正如Jeffrey Hantin在另一个答案中所说的,一致的看法是碎片化。