无法将Java堆大小设置为大于1568

时间:2011-12-31 16:55:09

标签: java memory heap

我正在运行具有以下属性的服务器:

Windows Server 2008 R2标准版 - 64位 4GB RAM

我正在尝试将应用程序的堆大小设置为3gb。我正在使用标志-Xmx3G -Xms3G。使用标志运行会导致以下错误:

  

VM初始化期间发生错误   无法为对象堆保留足够的空间   无法创建Java虚拟机。

我一直在玩这个设置,看看我的天花板是什么,发现1568是我的天花板。我错过了什么?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

似乎你没有物理内存的3G可用。这是一篇关于Java堆大小设置错误的有趣文章。 Java heap size setting errors