Maven - 无法为对象堆错误预留足够的空间

时间:2012-08-08 08:34:24

标签: maven jvm

我是Maven来构建我的Java项目。几次成功构建后,我现在收到以下错误:

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

在我的构建正在使用的maven.sh文件中,我添加了以下内容作为第一行

export MAVEN_OPTS=-Xmx512m

我仍然收到错误。

有人可以建议修复吗?

10 个答案:

答案 0 :(得分:16)

解决方案是将maven-surefire-plugin的forkMode设置为“never”。似乎在运行测试时,maven肯定会生成一个新的JVM。将其设置为永远不会解决问题。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.7.2</version>
    <configuration>
        **<forkMode>never</forkMode>**
        <argLine>-Xms1024m -Xmx1024m -XX:MaxPermSize=2048m</argLine>
        <systemPropertyVariables>
            <user.name>${user.name}</user.name>
        </systemPropertyVariables>
    </configuration>
</plugin>

答案 1 :(得分:12)

我有同样的问题,我认为Maven没有使用正确的jvm。您可以使用

进行检查
mvn -version

就我而言,我的JAVA_HOMEPATH中指定的jvm不正确:我使用的是x86 jdk 6而不是x64 jdk 7.修复此问题解决了这个问题。

答案 2 :(得分:3)

当我尝试构建Cloudera Navigator SDK示例时遇到了同样的问题。我使用的是32位JVM,编译似乎没问题,但之后的测试失败了,出现了这个错误:

Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap

我尝试设置MAVEN_OPTS = -Xmx512m,但这没有效果 - 它失败并显示相同的消息。甚至错误消息中的值2097152KB仍然是相同的(奇怪!)。

我终于发现堆大小值已经在pom.xml文件中进行了硬编码测试!它有

<argLine>-Xmx2048m ...
</argline>

我编辑了pom.xml并将其更改为-Xmx1024m,然后maven能够毫无问题地构建和测试所有内容。

所以从中得到的教训是,如果你正在构建其他人(例如Cloudera)给你的东西并且你得到这样的错误,请仔细检查pom.xml以查看该设置是否是硬编码的

仅供参考 - 我认为使用64位JVM可能也解决了这个问题,但我无法切换到64位。我们还需要其他一些东西才能使用它,它说它只适用于32位JVM(我不能在这里详细解释)。

答案 3 :(得分:2)

我认为您希望使用以下设置预留更多空间: MAVEN_OPTS=-Xmx512m

尝试将其设置得更低,因为Maven只有在能够保留整个空间时启动。 这个问题发生在我身上,我可以像描述的那样解决它。

答案 4 :(得分:2)

尝试设置变量: MAVEN_OPTS = -Xmx512m -XX:MaxPermSize = 128m

答案 5 :(得分:2)

更改为MAVEN_OPTS = -Xmx512m帮助我使用Windows 64位。

答案 6 :(得分:1)

尝试Java 64位并将java_home配置为此Java 64。 obs。:javac -version和mvn -version需要返回这个Java 64。

答案 7 :(得分:0)

正如Didier L上面所说的

这正是我遇到的问题,我们运行的是x86 JVM而不是64位......

当我改为64位JVM时,它解决了我的问题。

答案 8 :(得分:0)

在IDEA IntelliJ IDE中,Maven -> Runner上有一个设置来使用特定的JVM。我的默认设置是使用JRE而不是JAVA_HOME上设置的JDK。务必检查该设置。一旦我切换到使用JAVA_HOME,一切都运行良好。

答案 9 :(得分:0)

我尝试了这个,它适用于我 -

maven版本-3.2.5 java版本-jdk1.7.0_10

-Xmx600m -XX:PermSize = 256m