Maven:OutofMemoryError后跟无法创建Java虚拟机

Bal*_*pal 3 java maven-2 out-of-memory maven

我正在尝试使用maven进行项目工作,但我遇到了与内存相关的问题.

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

set MAVEN_OPTS="-Xmx1586m"
Run Code Online (Sandbox Code Playgroud)

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

set MAVEN_OPTS="-Xmx1586m -XX:MaxPermSize=512m"
Run Code Online (Sandbox Code Playgroud)

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

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

无法创建Java虚拟机.

我尝试为Xmx和MaxPermSize设置不同的值组合以使控件的大小,但都是无效的.

只有当我在MAVEN_OPTS中添加MaxPermSize选项时才会出现此错误.一旦我删除该选项,我没有得到上面提到的错误,但我确实得到了PermGen错误.

有什么建议我做错了吗?

ser*_*g10 12

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

Invalid maximum heap size: -Xmx1586m -XX:MaxPermSize=512m
Run Code Online (Sandbox Code Playgroud)

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

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

set MAVEN_OPTS=-XMx1586m -XX:MaxPermSize=512m
Run Code Online (Sandbox Code Playgroud)

  • "不使用引号"救了我! (5认同)

And*_*sov 6

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

也不要将permgen设置为512 - 这对于典型的风格来说太过分了.

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

例如

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
      <fork>true</fork>
    </configuration>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

此外,虽然分配内存也确保您有足够的可用内存.