Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JUnit java.lang.OutOfMemoryError when running all tests in a package

When loading all unit tests in a package, the make task throws a java.lang.OutOfMemoryError: Java heap space error.

If I run all the tests in each subpackage, though, all tests load and complete just fine. It is only when I try to run all tests in the parent package that the OOM error occurs.

I don't think this problem should be solved by tweaking VM parameters. I tried increasing the maximum heap and perm size, and it didn't solve the problem.

This leads me to believe there is some problem garbage collecting between loading tests in different packages, or that there is some too-eager class loading going on.

Is there a JUnit setting that could take care of these issues, or is the problem going to have to be solved by changing or adding code in the test cases?

like image 221
Simon Tower Avatar asked Nov 20 '09 15:11

Simon Tower


People also ask

What causes Java Lang OutOfMemoryError Java heap space?

OutOfMemoryError is a runtime error in Java which occurs when the Java Virtual Machine (JVM) is unable to allocate an object due to insufficient space in the Java heap. The Java Garbage Collector (GC) cannot free up the space required for a new object, which causes a java. lang. OutOfMemoryError .

What size matrix causes a Java OutOfMemoryError?

This error indicates that the application attempted to allocate an array that is larger than the heap size. For example, if an application attempts to allocate an array of 1024 MB but the maximum heap size is 512 MB then OutOfMemoryError will be thrown with “Requested array size exceeds VM limit”.


2 Answers

You must set all fields of the test classes to null in 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.

like image 82
Aaron Digulla Avatar answered Nov 04 '22 22:11

Aaron Digulla


I experienced a similar problem using TestNG and traced it to the amount of log information I was generating to the console. Once I'd reduced this I was able to run my test suite without memory problems.

like image 34
Adamski Avatar answered Nov 05 '22 00:11

Adamski