我正在运行具有以下属性的服务器:
Windows Server 2008 R2标准版 - 64位 4GB RAM
我正在尝试将应用程序的堆大小设置为3gb。我正在使用标志-Xmx3G -Xms3G。使用标志运行会导致以下错误:
VM初始化期间发生错误 无法为对象堆保留足够的空间 无法创建Java虚拟机。
我一直在玩这个设置,看看我的天花板是什么,发现1568是我的天花板。我错过了什么?
答案 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