web-dev-qa-db-ja.com

JUnitテストの実行時にのみヒープ領域が不足するのはなぜですか?

JUnitテストを実行するとき、私はいつもこのエラーに遭遇するようです:

Eclipse outOfMemoryError:ヒープ領域

私はJConsoleでEclipseを監視しており、ヒープメモリのピークは約150MBです。ヒープメモリを1GBに設定しました。

Eclipseの起動時に次の引数を使用しています。

-vm "C:\ Program Files\Java\jre1.5.0_08\bin\javaw.exe" -vmargs -Xmx1024M 
-XX:MaxPermSize = 128M -Dcom.Sun.management.jmxremote .port = 8999 
-Dcom.Sun.management.jmxremote.ssl = false 
-Dcom.Sun.management.jmxremote.authenticate = false 

誰かがこの問題を引き起こしている可能性があることを知っていますか? JUnitテストを実行しているときにのみ発生します。

25
smauel

Junitテストは、Eclipse IDEとは異なるvmで実行されます。したがって、メモリが不足しているのはvmであり、Eclipseのvmではありません。
テストの実行構成でテストvmの設定を変更できます。
実行構成に移動し、引数の下で、vm引数を設定できます。

40
Thijs Wouters

@Thijs Wouters応答に加えて、Eclipseでこの問題を修正するために、私は次のことを行いました。

  • JUnitの下に新しい実行構成を追加(実行>実行構成> JUnit>新規)
  • 引数タブ内で、必要に応じてVM引数を "-Xms64m -Xmx256m"以上に設定します
17
Nigel_V_Thomas

JUnitテストでメモリリークが発生している可能性があります。一般的な落とし穴は次のとおりです。JUnitは、すべてのテストメソッドのTestCaseクラスの新しいインスタンスを作成しますそして、すべてのインスタンス変数は、JUnitまで保持されます終了します。つまり、50個のテストメソッドを持つTestCaseクラスと、setUp()メソッドで1MBのオブジェクトグラフで初期化されるインスタンス変数がある場合、そのTestCaseクラスには50MBのヒープスペースが必要になります。

編集:上記の問題は古いバージョンのJUnitにのみ存在し、JUnit 4で修正されたと思います。

12

JUnitランチャーのヒープサイズを自動的に設定するEclipse用のプラグインをリリースしました。 http://code.google.com/p/junitlaunchfixer/ から入手できます。EclipseEuropa、Ganymede、Galileoで動作します。

2
Joey Gibson

私は問題の解決策を見つけました-それは他の人を助けるかもしれません;)私が(Eclipseを介して実行した)プログラムではなく、Eclipseアプリケーションのヒープサイズを増やしていました。プログラムを実行する前の実行コマンド。

1
Ana