为什么我收到JVM最大堆空间错误?

时间:2012-07-14 23:24:09

标签: java exception jvm heap

我正在尝试运行一个超过1024M堆空间的某个java程序。虽然我有4GB的RAM和32位的操作系统,但它的最大值是1024M。下面是我尝试用来启动程序的批处理代码:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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