我一直能够为在32位Windows XP(Java 1.4、1.5和1.6)上运行的Java SE分配1400 MB的内存。
java -Xmx1400m ...
今天,我在使用Java 1.5_16和1.6.0_07的新Windows XP计算机上尝试了相同的选项,并收到错误消息:
Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
通过反复试验,似乎1200兆字节是我可以在此计算机上分配的最大内存。
有什么想法为什么一台机器允许1400,而另一台只能允许1200?
编辑:机器具有4GB的RAM,Windows可以识别约3.5GB。
v
请记住,Windows具有虚拟内存管理功能,而JVM仅需要在其地址空间中连续的内存。因此,系统上运行的其他程序不一定会影响您的堆大小。会以您的方式获取的DLL会加载到您的地址空间中。不幸的是,Windows中的优化在链接期间最大程度地减少了DLL的重定位,这使您更有可能拥有零散的地址空间。除了常用的东西以外,可能会影响您地址空间的其他因素包括安全软件,CBT软件,间谍软件和其他形式的恶意软件。差异的可能原因是不同的安全补丁,C运行时版本等。设备驱动程序和其他内核位具有其自己的地址空间(4GB 32位空间中的其他2GB)。
您可以尝试在JVM进程中进行DLL绑定,然后尝试将DLL的基础重新构建为更紧凑的地址空间。不好玩,但是如果你拼命…
或者,您可以只切换到64位Windows和64位JVM。不管别人怎么建议,同时将咀嚼更多的内存,您将有很多更连续虚拟地址空间,并分配2GB连续将是微不足道的。