Почему место в куче заканчивается только при запуске тестов JUnit?

StackOverflow https://stackoverflow.com/questions/681133

Вопрос

При запуске тестов JUnit я, кажется, всегда сталкиваюсь с этой ошибкой:

ошибка затмения OutOfMemoryError:пространство кучи

Я отслеживал Eclipse с помощью JConsole, и пики памяти кучи составляют около 150 МБ.Я установил объем оперативной памяти в куче равным 1 ГБ.

Я использую следующие аргументы при запуске 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.

Это было полезно?

Решение

Тесты Junit выполняются на другой виртуальной машине, чем Eclipse IDE.Таким образом, именно этой виртуальной машине не хватает памяти, а не Eclipse.
Вы можете изменить настройки тестовой виртуальной машины в настройках запуска теста.
Вы переходите к конфигурациям запуска, а затем в разделе аргументы вы можете задать аргументы виртуальной машины.

Другие советы

В дополнение к ответу @Thijs Wouters, чтобы исправить эту проблему в eclipse, я сделал следующее:

  • Добавлена новая конфигурация запуска в JUnit (Выполнить> Выполнить конфигурацию>JUnit> Создать)
  • На вкладке аргументы установите для аргументов виртуальной машины значение "-Xms64m -Xmx256m" или выше, если необходимо

Вероятно, у вас утечка памяти в ваших тестах JUnit.Распространенная ошибка заключается в следующем:Junit создаст новый экземпляр класса TestCase для каждый метод тестирования в нем И все переменные экземпляра будут храниться до тех пор, пока JUnit не завершит работу.Это означает:если у вас есть класс TestCase с 50 тестовыми методами и переменной экземпляра, которая инициализируется графом объектов размером 1 МБ в вашем методе setUp(), то для этого класса TestCase потребуется 50 МБ места в куче.

Редактировать: проблема, описанная выше, существует только в более старых версиях JUnit, я думаю, что она была исправлена в JUnit 4.

Я только что выпустил плагин для Eclipse, который автоматически установит размер кучи в JUnit Launcher для вас.Вы можете получить это от http://code.google.com/p/junitlaunchfixer/ Он работает с Eclipse Europa, Ганимедом и Galileo.

Я нашел решение своей проблемы - это может помочь другим ;) Когда я увеличивал размер кучи, я увеличивал размер кучи приложения eclipse, а не моей программы (которую я выполнял через eclipse) Что мне нужно было сделать, так это изменить команды выполнения перед запуском моей программы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top