如何使用maven jvmArg解决"超出GC开销限制"?

Ale*_*oso 29 java garbage-collection scala out-of-memory maven

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

线程"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>
                        (...) 
Run Code Online (Sandbox Code Playgroud)

我已经尝试了最后引用的行,其中包含许多值:

  • <jvmArg>-Xmx512m{javaOpts.Xmx}</jvmArg>
  • <jvmArg>-Xmx4096M{javaOpts.Xmx}</jvmArg>
  • ...
  • <jvmArg>-Xmx10000000000M{javaOpts.Xmx}</jvmArg>

但对于他们所有人我都有同样的错误.

有人可以帮帮我吗?观察:我正在从IntelliJ IDEA运行.

fla*_*ian 43

Java 7

这不是Maven问题,您需要为VM提供更多内存.您可以通过环境变量执行此操作,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"

  • 这应该添加到您的shell环境中,而不是您的pom.xml. (4认同)
  • 谢谢flavian,但我在哪里可以将这些代码放在我的pom.xml中? (2认同)

Ale*_*der 8

我遇到了同样的问题:我的项目wokspace由250个以上的maven模块组成,当pom.xml在IDEA中打开时,将<project>and <parent>标记加红色下划线,并将鼠标悬停在损坏的标记上时会显示此错误:

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

我的解决方案:

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

由于以前我对捆绑的Maven遇到问题,所以我不信任捆绑的Maven。


小智 5

将并行垃圾回收添加到上面的最高答案可能是最好的选择:

-Xmx2048M -Xss128M -XX:MaxPermSize=2048M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
Run Code Online (Sandbox Code Playgroud)