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

Ste*_*ier 7 java jvm jvm-arguments heap-size

基本上我们已经注意到,在某些计算机上设置JVM选项-Xmx(最大堆大小)有时会导致JVM无法初始化,即使系统上有足够的RAM.

因此,例如,在4GB的机器上,我们有-Xmx1024m失败但-Xmx800m工作.我可以在一台1GB的机器上理解,即使是一台2GB的机器,但在一台4GB的机器上,特别是考虑到Windows,Linux等可以交换RAM,为什么这会失败?

我已经看到很多线程和问题都说减少你的最大堆大小,但是没有人可以解释为什么它失败了,这正是我真正想要的.

同样,你怎么说消耗尽可能多的内存,你想要一定的大小呢?

Jef*_*tin 13

这可能是由于虚拟地址空间碎片造成的.根据DLL的加载地址,线程的堆栈位置,不可移动的本机内存分配,内核保留地址等,可能无法为堆的最大可能大小保留连续的 1024MB地址范围,尤其是在32中.比特过程.