2012-07-27 130 views
3

我想为我的项目工作使用maven,但我坚持与内存相关的问题。Maven:OutofMemoryError后面无法创建Java虚拟机

当我运行Maven时,我得到的堆空间错误,我使用下面的行

set MAVEN_OPTS="-Xmx1586m" 

在此之后,当我再次运行Maven的固定,我不明白的堆空间错误,而是我得到PermGen空间错误。为了解决我用下面的语法

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

但一旦我开始使用MaxPermSize参数选项我碰到下面的错误

无效的最大堆大小:-Xmx1586m -XX:MaxPermSize参数=512米

无法创建Java虚拟机。

我已经尝试为Xmx和MaxPermSize设置不同的值组合,以控制大小,但都是无效的。

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

任何建议我做错了什么?

回答

6

你可以尝试设置初始堆大小和初始PermGen的尺寸相对较小,但通过-Xms128m -Xmx1024m -XX:PermSize = 128m -XX:MaxPermSize = 256m设置适当的最大堆和水溶液

也不要将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> 

此外,虽然分配内存还要确保你有那么多的可用内存。

2

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

+1

并检查您的记忆使用情况。如果没有空闲的内存,这对你无能为力 – 2012-07-27 12:09:01

+0

@ChristianLendel我已经检查了内存,并在释放大量内存后尝试了相同的内容,但无济于事。 – 2012-07-27 12:30:04

+0

@Peter即使我使用的是32位的组合,我也只想使用2GB的内存,对于32位的组合也可以。你在哪看到这个问题。可能是我错过了一些东西。请记住我有足够的可用内存 – 2012-07-27 12:32:53

12

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

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

是告诉你,Java已经使用的整个字符串“-Xmx1586m -XX:MaxPermSize参数=512米”尝试设置最大堆大小。

我的猜测是你需要设置你的环境变量而不使用引号。尝试:

set MAVEN_OPTS=-XMx1586m -XX:MaxPermSize=512m 
+0

已经尝试这个以及但没有成功:( – 2012-07-27 12:59:35

+5

“不使用引号”救救我! – Skywolf 2014-03-13 05:21:49

0

难道这只是一个大写问题?您有:

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

时,你应该有(注意小写字母“M”):

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

ahhh ....它是在输入问题时,但实际上被照顾 – 2012-07-27 13:00:53