2012-07-14 53 views
0

我想运行一个超过1024M堆空间的特定Java程序。尽管我有4GB的RAM和32位的操作系统,但它的最大值是1024M。下面是我想用它来启动程序批量代码:为什么我得到JVM最大堆空间错误?

@echo off 
java -Xmx2048M -Xms2048M -jar program.jar 

有人能解释为什么我得到一个JVM“无法保留足够的空间”的错误?

+1

不知道你在运行什么操作系统,但在Windows XP上,我只能分配1200-1400 MB。请参阅http://stackoverflow.com/questions/171205 – 2012-07-15 04:04:56

+0

在64位JVM上,您可以将堆大小设置为任何值,但实际限制通常为100 GB的数量级(因为完整GC的长度与比例堆一致sixe) – 2012-07-15 07:02:49

+0

我使用的是总共4GB DDR3 RAM的Windows 7 32位操作系统。 – bigbass1997 2012-07-16 00:29:39

回答

1

你在Windows上,一个32位程序可以拥有的最大地址空间是2GB。 现在,由于流程和系统需要管理内容(例如.dlls),因此不能将所有这些2GB用于java堆。所以尽量少尝试,例如1.5 GB。

您可以通过引导开关使32位程序获得3GB的地址空间,请参阅here,如果您确实需要更多堆空间,则可以替代切换到64位操作系统。

0

由于在2048M大小的RAM中不能有连续的内存块,因此您将得到“无法预留足够空间”的错误。我建议你将-Xms减少到512M,因为我不认为你最初需要2048M的堆空间。如果这不起作用,那么您将需要减少-Xmx值。

+0

让我知道这是否有效。 – cyclotrojan 2012-07-14 23:41:26

+0

nope同样的错误。我甚至尝试了其他人的说法。 – bigbass1997 2012-07-14 23:53:07