7

パッケージ内のすべての単体テストをロードすると、make タスクが java.lang.OutOfMemoryError: Java ヒープ スペース エラーをスローします。

ただし、各サブパッケージですべてのテストを実行すると、すべてのテストが読み込まれ、問題なく完了します。OOM エラーが発生するのは、親パッケージですべてのテストを実行しようとしたときだけです。

この問題は、VM パラメーターを調整することによって解決されるべきではないと思います。最大ヒープと perm サイズを増やしてみましたが、問題は解決しませんでした。

これにより、異なるパッケージでテストをロードする間にガベージ コレクションに問題があるか、あまりにも熱心なクラスのロードが行われていると思われます。

これらの問題を処理できる JUnit 設定はありますか、それともテスト ケースのコードを変更または追加することで問題を解決する必要がありますか?

4

4 に答える 4

11

nullテストクラスのすべてのフィールドをに設定する必要がありますtearDown()

The reason is that JUnit instantiates one instance of the test class per test. It keeps that instance around for the whole time to save the results of the test (success, failure, stack trace). So if you use fields, they will stay and you'll run out of memory.

于 2009-11-20T15:27:02.737 に答える
4

私は TestNG を使用して同様の問題を経験し、コンソールに生成していたログ情報の量をたどりました。これを減らすと、メモリの問題なしにテスト スイートを実行できました。

于 2009-11-20T16:01:40.420 に答える
3

GC は、CPU に余裕があるとき、または空きメモリが少ないときに実行されます。テストがクラッシュした場合、どこかでメモリ リークが発生している可能性があります。(はい、Javaにも存在します)

循環参照と静的クラス/変数を調べてください。これらは、メモリ リークの IIRC の一般的な理由です。jconsole も参照してください。

于 2009-11-20T15:19:41.243 に答える