2011-12-31 61 views
2

我运行具有以下属性的服务器:无法设置Java堆大小大于1568

的Windows Server 2008 R2标准 - 64 4GB RAM

我想设置堆大小3GB为应用程序。我正在使用标志-Xmx3G -Xms3G。在下面的错误标志结果运行:

Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.

我一直在玩的设置,看看我的上限是什么,结果发现1568是我的上限。我错过了什么?

回答

1

Java在启动时需要连续的虚拟内存。在Windows上,32位应用程序在32位仿真环境中运行,因此您不会获得比在32位操作系统中更多的连续内存。 C.F.在Solaris上,您可以获得超过3 GB的32位Java虚拟内存。

我建议你使用64位版本的Java,因为这会利用你拥有的所有内存。您仍然需要有空闲的内存,但较大的地址空间不会受到碎片影响。

BTW:堆空间只是使用的内存的一部分,您需要共享库,直接内存,GUI组件等的内存。

2

系统上有多少物理内存可用(超出原始4 GB)?听起来你的系统在启动虚拟机时没有3GB的物理内存。

请记住,JVM需要比分配给堆的内存更多的内存 - 还有其他数据结构(线程堆栈等)也需要内存。所以您提供的设置尝试使用超过3GB的内存。

另外,你使用的是64位的jvm吗?根据this document,32位虚拟机上堆大小的实际限制为1.4到1.6千兆字节。