Почему пустое пространство заканчивается только при выполнении тестов 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.
Ответы
Ответ 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). Что мне нужно было сделать изменяет команды выполнения перед запуском моей программы.