34

运行课程时,我有以下异常:

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

4

7 回答 7

47

爪哇 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"

于 2013-09-12T17:52:51.390 回答
10

我遇到了同样的问题:我的项目 wokspace 由 >250 个 maven 模块组成,当pom.xml在 IDEA 中打开 a 时,<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.9Maven 设置截图

由于我之前在使用捆绑的 maven 时遇到过问题,所以我只是不信任捆绑的 maven。

于 2017-06-21T12:52:50.503 回答
6

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

-Xmx2048M -Xss128M -XX:MaxPermSize=2048M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
于 2015-12-03T20:29:48.880 回答
2

很抱歉回复很晚,但我认为我的回答也可能对其他人有所帮助。

scala-maven-plugin 不适用于 MAVEN_OPTS,增加内存的唯一方法是在插件配置中使用 jvmArgs。但是你不应该把 jvmArgs 放在启动器部分,而是放在配置部分,像这样:

<configuration>
    <jvmArgs>
        <jvmArg>-Xmx1024m</jvmArg>
        <jvmArg>-Xms256m</jvmArg>
    </jvmArgs>
</configuration>

这对我有用。

于 2014-02-20T23:03:59.417 回答
2

在某些情况下,您可以禁用 GC 限制:

-XX:-UseGCOverheadLimit
于 2013-09-13T12:24:28.580 回答
0

您正在将 jvmArgs 添加到 pom.xml 中的maven-scala-plugin配置中。

你是什​​么意思你从 IntelliJ IDEA 运行?你到底是怎么做的?通过他们的构建/运行,您根本不会通过 Maven!然后在 pom.xml 中更改 maven-scala-plugin 启动器基本上是没用的。要更改 IntelliJ 的运行配置,请参阅此答案

如果您真的想从 Maven 运行,在将 jvmArg 参数添加到 pom.xml 后,您需要运行插件:

mvm scala:run -Dlauncher=MyClassName

注意:您放置 MyClassName 的位置,实际上是启动器的名称,而不是类。对于许多项目,人们为启动器选择合理的名称,这使得它们通常与类的本地名称一致。但是,如果您愿意,可以将其称为 MyLauncher。

阅读 maven-scala-plugin 的文档可能会对您有所帮助。

于 2013-09-14T02:48:42.583 回答
0

None of the answers above worked for me. What did work was this answer from Intellij support forum. It suggests increasing build process heap size to 1024 MB by going to Build, Execution, Deployment > Compiler > Build Process heap size(Mbytes)

于 2020-10-13T20:03:56.460 回答