运行类时,我有以下异常:
线程“main”中的异常java.lang.OutOfMemoryError:超出了GC开销限制
我试图从类包的maven pom.xml中增加jvmArg堆大小:
http://maven.apache.org/xsd/maven-4.0.0.xsd“> 4.0.0
<parent>
(...)
</parent>
<artifactId>(...)</artifactId>
<name>(...)</name>
<properties>
<javaOpts.Xmx>4g</javaOpts.Xmx> <!-- default that can be adjusted on the command line with -DjavaOpts.Xmx=... -->
<(...).basedir>${project.basedir}/..</(...).basedir>
</properties>
<build>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<configuration>
<launchers>
<launcher>
<id>MyClassName</id>
<mainClass>(...)</mainClass>
<jvmArgs>
<jvmArg>-Xmx${javaOpts.Xmx}</jvmArg>
(...)
我已经尝试了最后引用的行,其中包含许多值:
-
<jvmArg>-Xmx512m{javaOpts.Xmx}</jvmArg>
-
<jvmArg>-Xmx4096M{javaOpts.Xmx}</jvmArg>
-
......
-
<jvmArg>-Xmx10000000000M{javaOpts.Xmx}</jvmArg>
但对于他们所有人我都有同样的错误 .
有人可以帮帮我吗?观察:我是从 IntelliJ IDEA 开始的 .
6 回答
Java 7
这不是Maven问题,您需要为VM提供更多内存 . 您可以通过 environment variables 执行此操作,Maven Launcher将在加载时自动获取这些设置,并使用它们来配置底层Java VM .
这样做的简单方法是:
export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled"
视窗:
set MAVEN_OPTS=-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled
(没有双引号)
Java 8
Java 8用元空间替换了永久代,新设置如下所示:
export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M -XX:+CMSClassUnloadingEnabled"
我遇到了同样的问题:我的项目wokspace由> 250个maven模块组成,当在IDEA中打开
pom.xml
时,<project>
和<parent>
标签用红色加下划线,当悬停在损坏的标签上时出现此错误:My solution :
在
>Settings >Build, Execution, Deployment >Build Tools >Maven >Importing
中设置了较高的值 - 例如-Xmx1g
and将
>Settings >Build, Execution, Deployment >Build Tools >Maven
(Maven主目录)下的maven实现从(Bundled) Maven 3
更改为我的本地maven安装(不是与IDEA捆绑的安装),例如至/opt/maven/apache-maven-3.3.9
:由于我之前遇到捆绑maven的问题,我只是不相信捆绑的maven .
将并行垃圾收集添加到上面的答案可能是最好的选择:
在某些情况下,您可以禁用GC限制:
很抱歉很晚才回复,但我认为我的回答也可以帮助其他人 .
scala-maven-plugin不能与MAVEN_OPTS一起使用,增加内存的唯一方法是在插件配置中使用jvmArgs . 但是你应该把jvmArgs放在启动器部分里面,但是在配置部分里面,就像这样:
这适合我 .
您正在将jvmArgs添加到pom.xml中的maven-scala-plugin config .
你是什么意思从IntelliJ IDEA运行?你究竟是怎么做到的?通过他们的构建/运行,你根本不会通过Maven!然后更改pom.xml中的maven-scala-plugin启动器基本没用 . 要更改IntelliJ的运行配置,请参阅this answer .
如果您真的想从Maven运行,在将jvmArg参数添加到pom.xml之后,则需要运行该插件:
注意:放置MyClassName的位置,实际上是启动器的名称,而不是类 . 对于许多项目,人们为 Launcher 选择合理的名称,这使得它们通常与类的本地名称一致 . 但如果你愿意,可以称之为MyLauncher .
阅读maven-scala-plugin的文档可能会对你有所帮助 .