Windows上のMaven 2でのJavaヒープ領域の設定


91

プロジェクトのビルド中にこのメッセージが表示されます

java.lang.OutOfMemoryError:Javaヒープスペース

私は、ヒープ領域を増やすにはどうすればよい、私は8GBのだか、RAMきたその不可能その多くを消費しMavenのことを、私はこれを見つけたhttp://vikashazrati.wordpress.com/2007/07/26/quicktip-how-to-increase-the -java-heap-memory-for-maven-2-on-linux / Linuxでそれを行う方法ですが、Windows 7を使用しています。WindowsでJavaヒープスペースを変更するにはどうすればよいですか?


64ビットバージョンのWindowsを使用していると思いますか?そうでない場合は、ヒープサイズとして1.5Gを超える値を指定することはなく、他の0.5Gウィンドウで直接使用できるため、JVMで必要になります。ウィンドウでカーネルモードコードに1Gのみを使用し、ユーザーモードコードに3Gのみを使用するオプションがありますが、Sun JVMでは使用できません。
vickirk 2010年

@vickirk私は64ビットバージョンのWindowsを使用しています
Gandalf StormCrow

1
64ビットバージョンのJVMも使用していますか?JDKダウンロードページのドロップダウンリストに、Windows x64としてリストされます。java.sun.com
javase

回答:


117

設定する環境変数はMAVEN_OPTS、たとえばMAVEN_OPTS=-Xmx1024mです。maxmemあなたはフォークにコンパイラプラグインを設定するときにポンポンでの構成にのみ適用され javac、新しいJVMに。それ以外の場合、プラグインはMavenと同じVM内で実行されるため、コマンドラインでを介して渡されるメモリ内で実行されますMAVEN_OPTS

Windows 7でMAVEN_OPTSを設定するには:

  1. [マイコンピュータ]右クリックして[ プロパティ ]を選択します(キーボードショートカットWindows+を押しますPause/Break
  2. システムのプロパティの左側のナビゲーションにある[システム詳細設定]リンクをクリックして、システム詳細プロパティを表示します。
  3. 詳細」タブに移動し、「システム詳細プロパティ」構成ウィンドウの下部にある「環境変数」ボタンをクリックします。
  4. 新しいユーザー変数を作成し、変数名をMAVEN_OPTSに設定し、変数値-Xmx1024m(以上)に設定します

新しいコマンドウィンドウを開き、を実行しmvnます。


1
これはビルドの速度に影響しますか?より多くのメモリを割り当ててMavenビルドを強化するためのヒントはありますか?
Mahendran

45

surefire(またはフェイルセーフ)JUnitテストの実行中にヒープ領域が不足している場合、MAVEN_OPTSを変更しても役に立たない場合があります。問題を修正したこの投稿が見つかるまで、MAVEN_OPTSでさまざまな構成を試しましたが、うまくいきませんでした。

基本的に、JUnitsは独自の環境に分岐し、MAVEN_OPTSの設定を無視します。JUnitにメモリを追加するには、pomでsurefireを設定する必要があります。

うまくいけば、これは誰か他の人の時間を節約できるでしょう!


編集:いつかリンクが切れた場合に備えて、Keith Chapmanのブログからソリューションをコピーします。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <forkMode>pertest</forkMode> 
    <argLine>-Xms256m -Xmx512m</argLine>
    <testFailureIgnore>false</testFailureIgnore> 
    <skip>false</skip> 
    <includes> 
      <include>**/*IntegrationTestSuite.java</include>
    </includes>
  </configuration>
</plugin>

更新(2017年5月31日):これを指摘してくれた@johnstoshに感謝します。私がこの答えを出して以来、確実に少し進化しました。ここに彼らのドキュメントへのリンクと更新されたコードサンプルがあります(arg行はまだこの質問の重要な部分です):

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20</version>
    <configuration>
        <forkCount>3</forkCount>
        <reuseForks>true</reuseForks>
        <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
        <systemPropertyVariables>
            <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema>
        </systemPropertyVariables>
        <workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory>
    </configuration>
  </plugin>

それは私の時間のいくらかを節約しました!ありがとう!残念ながら、私は一度しか賛成できません!:)
javanna

これは、実際のmavenスタイルで、他の人の間で最も役立つ回答です。ありがとう!
Andremoniy 2014年

これが質問に対する実際の答えです
ジョナサンランドラム2016

1
surefireのドキュメントを参照してください。バージョン2.14より前のsurefireでは、forkModeパラメータを使用してフォークを設定していました。そのパラメーターは下位互換性のために引き続きサポートされていますが、ユーザーは構成を移行し、代わりにforkCountとreloadForksを使用することを強くお勧めします。
johnstosh

21

EXPORTの代わりにSETを除いて、同じコマンドでなければなりません。

  • MAVEN_OPTS = -Xmx512mを設定すると、512Mbのヒープが得られます。
  • MAVEN_OPTS = -Xmx2048mを設定すると、2Gbのヒープが得られます

同じコマンドであるべきだと私は同意しますが、それは真の声明にはなりません。ここに理由がありますC:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
Gandalf StormCrow

グローコーダーは少し間違っています。変数をエクスポートする必要はありませんが、変数に値を割り当てるには、設定する必要があります。
JeremyP 2010年

すべてのビルドで同じ値を使用する場合は、MAVEN_OPTSをWindows環境変数として設定することもできます。
digitaljoel

@ガンダルフあなたはその前にセットを置く必要があります@ジェレミーはい、それがそれがエクスポートの代わりにセットを使うように言う理由です
corsiKa

9

Macの場合:JAVA_OPTSおよびの代わりに、代わりにMAVEN_OPTS_JAVA_OPTIONSを使用します。これでうまくいきます!


これはWindowsでも機能します。これをEclipseのmaven実行構成の環境変数として追加すると、m2eから実行されたテストでPermGenエラーが発生しなくなりました
fedeb

3

運が悪いのにMAVEN_OPTS変数を使用しようとした後、私はこのサイトに出会いました。したがって、デフォルトのVMオプションに-Xms128m -Xmx1024mを追加するだけで動作しました。

Eclipseでこれらを変更するには、「ウィンドウ」->「設定」->「Java」->「インストールされているJRE」に移動します。チェックしたJRE / JDKを選択し、[編集]をクリックします。


0

Windowsの場合:

環境変数を追加します(システム変数とユーザー変数の両方で、変数がさまざまな場所から取得されるという奇妙な問題があるため、両方に追加します)。

MAVEN_OPTSという名前を付けます。

値は次のとおりです。 -Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled

数値は異なる場合があります。MEMサイズに合わせてください。

私はその問題を抱えていて、これでそれを修正しました。


0

機能しました-Eclipseで変更するには、[ウィンドウ]-> [設定]-> [Java]-> [インストールされているJRE]に移動します。チェックしたJRE / JDKを選択し、[編集]をクリックします。

デフォルトのVM引数= -Xms128m -Xmx1024m


-6

あなたは2つのオプションを探していますjava

  • -Xmx 最大ヒープサイズ
  • -Xms 開始ヒープサイズ

次のjavaように、実行可能ファイルのコマンドライン呼び出しにそれらを配置します。

java -Xms512M -Xmx1024M my.package.MainClass

アプリケーションによっては、開始時と最大ヒープサイズを同じにすることが望ましい場合があることに注意してください。これにより、実行時のヒープのサイズ変更(応答性が必要なアプリケーションで時間がかかる可能性があります)が回避されます。ヒープのサイズを変更するには、多くのオブジェクトを移動したり、簿記をやり直したりする必要があります。

毎日のプロジェクトの場合は、十分と思われるものにしてください。ヘルプのプロファイル。


1
ebelisleが述べているように、このオプションは、Mavenを使用して、少なくとも「-D」を指定したMavenオプションを指定する必要があるため、まったく機能しませんが、私たちが話しているJavaコマンドではありません
frandevel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.