3

我正在尝试将 maven 用于我的项目工作,但我遇到了与内存相关的问题。

当我运行 maven 时,我得到了我使用以下行修复的堆空间错误

set MAVEN_OPTS="-Xmx1586m"

在此之后,当我再次运行 maven 时,我没有收到堆空间错误,而是收到 PermGen 空间错误。为了解决这个问题,我使用了以下语法

set MAVEN_OPTS="-Xmx1586m -XX:MaxPermSize=512m"

但是一旦我开始使用MaxPermSize选项,我就会收到以下错误

最大堆大小无效:-Xmx1586m -XX:MaxPermSize=512m

无法创建Java虚拟机。

我尝试为 Xmx 和 MaxPermSize 设置不同的值组合来控制大小,但所有这些都是无效的。

仅当我将 MaxPermSize 选项放入 MAVEN_OPTS 时,我才会收到此错误。删除该选项后,我不会收到上述错误,但确实会收到 PermGen 错误。

有什么建议我做错了吗?

4

4 回答 4

12

问题是java没有理解你的命令行选项。消息:

Invalid maximum heap size: -Xmx1586m -XX:MaxPermSize=512m

告诉你java已经使用了整个字符串“-Xmx1586m -XX:MaxPermSize=512m”来尝试设置最大堆大小。

我的猜测是您需要在不使用引号的情况下设置环境变量。尝试:

set MAVEN_OPTS=-XMx1586m -XX:MaxPermSize=512m
于 2012-07-27T12:34:38.657 回答
6

您可以尝试将初始堆大小和初始 permgen 大小设置得相对较小,但通过 -Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m 设置正确的最大堆和 pergent

也不要将 permgen 设置为 512 - 这对于典型的场景来说太多了。

此外,您可能希望在 maven 中使用 fork 选项,并在不同的 JVM 中启动插件执行。

例如

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
      <fork>true</fork>
    </configuration>
  </plugin>

此外,在分配内存时,还要确保您有足够的可用内存。

于 2012-07-27T12:51:12.093 回答
2

我的猜测是你在 32 位操作系统上有一个 32 位 JVM,你不能创建一个那么大的应用程序。尝试使用更少的内存或在 64 位操作系统上使用 64 位 JVM。

于 2012-07-27T11:55:52.853 回答
0

会不会只是大小写问题?你有:

set MAVEN_OPTS="-XMx1586m -XX:MaxPermSize=512m"

什么时候你应该有(注意小写的“m”):

set MAVEN_OPTS="-Xmx1586m -XX:MaxPermSize=512m"
于 2012-07-27T12:47:38.677 回答