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

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"

于 2013-09-12T17:52:51.390 に答える
6

上記の一番の回答に並列ガベージ コレクションを追加することが、おそらく最良の選択肢です。

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

場合によっては、GC 制限を無効にすることができます。

-XX:-UseGCOverheadLimit
于 2013-09-13T12:24:28.580 に答える
0

pom.xml のmaven-scala-plugin設定にjvmArgs を追加しています。

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 に答える