我一直能够为在 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 MB 是我可以在这台机器上分配的最大空间。
有什么想法为什么一台机器允许 1400 而另一台机器只允许 1200?
编辑:机器有 4GB RAM,Windows 可以识别大约 3.5GB。
请记住,Windows 具有虚拟内存管理,并且 JVM 仅需要连续的内存在其地址空间中。因此,系统上运行的其他程序不一定会影响您的堆大小。阻碍您的是加载到您的地址空间中的 DLL。不幸的是,Windows 中的优化最大限度地减少了链接过程中 DLL 的重定位,这使得您更有可能拥有碎片化的地址空间。除了常见的东西之外,可能侵入您的地址空间的东西还包括安全软件、CBT 软件、间谍软件和其他形式的恶意软件。造成差异的可能原因是不同的安全补丁、C 运行时版本等。设备驱动程序和其他内核位有自己的地址空间(4GB 32 位空间中的另外 2GB)。
You could尝试检查 JVM 进程中的 DLL 绑定,并尝试将 DLL 重新设置为更紧凑的地址空间。不好玩,但如果你绝望的话......
或者,您也可以切换到 64 位 Windows 和 64 位 JVM。尽管其他人有什么建议,虽然它会消耗更多的内存,但你将拥有much更多连续的虚拟地址空间,连续分配 2GB 是微不足道的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)