如何使用maven jvmArg解决“超过GC开销限制”?

运行类时,我有以下异常:

线程“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运行。


答案 1

Java 7

这不是 Maven 问题,需要为 VM 提供更多内存。您可以通过环境变量执行此操作,Maven 启动器将在加载时自动选取这些设置,并使用它们来配置底层 Java VM。

要做到这一点,最简单的方法是:

export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled"

窗户:

set MAVEN_OPTS=-Xmx1024M -Xss128M -XX:MaxPermSize=1024M -XX:+CMSClassUnloadingEnabled

(无双引号)

爪哇 8

Java 8 已经用元空间取代了永久生成,新设置如下所示:

export MAVEN_OPTS="-Xmx1024M -Xss128M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=1024M -XX:+CMSClassUnloadingEnabled"


答案 2

我遇到了同样的问题:我的项目wokspace由>250个maven模块组成,当在IDEA中打开一个时,和标签用红色下划线标出,当悬停在损坏的标签上时,会出现这个错误:pom.xml<project><parent>

java.lang.OutOfMemoryError: 超出 GC 开销限制

我的解决方案

  • 设置高值 - 例如 >Settings >Build, Execution, Deployment >Build Tools >Maven >Importing-Xmx1g
  • 将 (Maven 主目录) 下的 maven 实现从更改为我的本地 maven 安装(不是与 IDEA 捆绑在一起的安装),例如:>Settings >Build, Execution, Deployment >Build Tools >Maven(Bundled) Maven 3/opt/maven/apache-maven-3.3.9Maven Settings Screenshot

由于我以前遇到过捆绑的maven的问题,我只是不信任捆绑的maven。


推荐