Я получаю это сообщение во время сборки моего проекта
java.lang.OutOfMemoryError: пространство кучи Java
Как мне увеличить пространство кучи, у меня 8 ГБ или ОЗУ, это невозможно, чтобы maven потреблял так много, я нашел это http://vikashazrati.wordpress.com/2007/07/26/quicktip-how-to-increase-the -java-heap-memory-for-maven-2-on-linux / как это сделать на linux, но я на windows 7. Как я могу изменить пространство кучи java под окнами?
Ответы:
MAVEN_OPTS
Например, устанавливаемая переменная средыMAVEN_OPTS=-Xmx1024m
.maxmem
Конфигурации в П применяется только тогда , когда вы устанавливаете плагин компилятора для вилкиjavac
в новую JVM. В противном случае плагин работает внутри той же виртуальной машины, что и Maven, и, следовательно, в памяти, переданной в командной строке через файлMAVEN_OPTS
.Чтобы установить MAVEN_OPTS в Windows 7:
-Xmx1024m
(или более)Откройте новое командное окно и запустите
mvn
.источник
Если во время надежного (или отказоустойчивого) тестирования JUnit у вас заканчивается пространство кучи, изменение MAVEN_OPTS может вам не помочь. Я продолжал безуспешно пробовать разные конфигурации в MAVEN_OPTS, пока не нашел этот пост , в котором проблема была решена.
В основном JUnits отключаются в свою собственную среду и игнорируют настройки в MAVEN_OPTS. Вам нужно настроить surefire в вашем pom, чтобы добавить больше памяти для JUnits.
Надеюсь, это поможет кому-то еще сэкономить время!
Изменить: копирование решения из блога Кейта Чапмана на случай, если ссылка когда-нибудь сломается:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkMode>pertest</forkMode> <argLine>-Xms256m -Xmx512m</argLine> <testFailureIgnore>false</testFailureIgnore> <skip>false</skip> <includes> <include>**/*IntegrationTestSuite.java</include> </includes> </configuration> </plugin>
Обновление (31.05.2017): Спасибо @johnstosh за указание на это - уверенность немного изменилась с тех пор, как я опубликовал этот ответ. Вот ссылка на их документацию и обновленный образец кода (строка arg по-прежнему является важной частью этого вопроса):
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20</version> <configuration> <forkCount>3</forkCount> <reuseForks>true</reuseForks> <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine> <systemPropertyVariables> <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema> </systemPropertyVariables> <workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory> </configuration> </plugin>
источник
Это должна быть та же команда, за исключением SET вместо EXPORT.
источник
C:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
На Mac: вместо
JAVA_OPTS
иMAVEN_OPTS
используйте _JAVA_OPTIONS. Это работает!источник
После неудачной попытки использовать переменную MAVEN_OPTS я наткнулся на этот сайт, который у меня работал. Поэтому все, что мне нужно было сделать, это добавить -Xms128m -Xmx1024m к параметрам виртуальной машины по умолчанию, и это сработало.
Чтобы изменить их в Eclipse, перейдите в Window -> Preferences -> Java -> Installed JREs. Выберите отмеченный JRE / JDK и нажмите «Изменить».
источник
В окнах:
Добавьте переменную окружения (как в системных, так и в пользовательских переменных, у меня есть странная проблема, потому что она получает переменную из разных мест, поэтому я добавляю их в обе).
Назовите его MAVEN_OPTS.
Значение будет:
-Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled
Цифры могут быть разными, делайте их в соответствии с размером вашей памяти.
У меня была эта проблема, и это исправило ее, больше ничего!
источник
Это сработало - чтобы изменить в Eclipse, перейдите в Window -> Preferences -> Java -> Installed JREs. Выберите отмеченный JRE / JDK и нажмите «Изменить».
Аргументы виртуальной машины по умолчанию = -Xms128m -Xmx1024m
источник
Вы ищете 2 варианта
java
:Поместите их в вызов
java
исполняемого файла из командной строки , например:Имейте в виду, что вы можете захотеть, чтобы начальный и максимальный размеры кучи были одинаковыми в зависимости от приложения, поскольку это позволяет избежать изменения размера кучи во время выполнения (что может занять время в приложениях, которые должны реагировать). Изменение размера кучи может повлечь за собой перемещение большого количества объектов и переделку бухгалтерии.
Для повседневных проектов делайте то, что считаете достаточно хорошим. Профиль для помощи.
источник