为什么有时将-Xmx设置得太高会导致JVM失败,即使有可用的RAM也是如此?

rryofs0p  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(215)

基本上,我们已经注意到,在一些计算机上设置JVM选项-Xmx(最大堆大小)有时会导致JVM无法初始化,即使系统上有足够的RAM。
例如,在4GB的机器上,我们有-Xmx 1024 m,它失败了,但-Xmx 800 m工作。我可以理解在1GB的机器上,甚至是2GB的机器上,但在4GB的机器上,特别是考虑到Windows、Linux等可以交换RAM,为什么会失败?
我已经看到了很多线程和问题说,以减少您的最大堆大小,但没有人可以解释为什么它失败,这是我真正寻找的。
还有,你怎么说消耗尽可能多的内存,你想要达到一定的大小呢?

ntjbwcob

ntjbwcob1#

这有可能是由于virtual address space fragmentation的原因。根据DLL的加载地址、线程的堆栈位置、不可移动的本机内存分配、内核保留的地址等,为堆的最大潜在大小保留 * 连续 * 1024MB的地址范围可能是不可能的,尤其是在32位进程中。

h4cxqtbf

h4cxqtbf2#

I came across this issue a while ago with Windows XP。在大多数XP机器上,我可以分配1400MB,而其他机器只能分配1200MB。正如Jeffrey Hantin在另一个答案中所说的,一致的看法是碎片化。

相关问题