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

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

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

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

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

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

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

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

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

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

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

另外,你使用的是64位的jvm吗? 根据该文档, 32位vm上的堆大小的实际限制是1.4到1.6千兆字节。

看来你没有3G的物理记忆。 这是一篇关于Java堆大小设置错误的有趣文章。 Java堆大小设置错误