Подтвердить что ты не робот

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

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

eclipse 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.

4b9b3361

Ответ 1

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

Ответ 2

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

  • Добавлена ​​новая настройка запуска в JUnit (Run > Run configuration > JUnit > New)
  • На вкладке "Параметры" задайте аргументы виртуальной машины "-Xms64m -Xmx256m" или выше, если необходимо

Ответ 3

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

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

Ответ 4

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

Ответ 5

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