Почему место в куче заканчивается только при выполнении тестов JUnit? - PullRequest
24 голосов
/ 25 марта 2009

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

eclipse outOfMemoryError: пространство кучи

Я наблюдал за Eclipse с JConsole и пиками памяти кучи около 150MB Я установил кучи памяти на 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.

Ответы [ 5 ]

39 голосов
/ 25 марта 2009

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

16 голосов
/ 17 сентября 2010

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

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

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

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

2 голосов
/ 23 сентября 2009

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

1 голос
/ 27 мая 2010

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

...