Установка пространства кучи Java в Maven 2 в Windows

91

Я получаю это сообщение во время сборки моего проекта

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 под окнами?

Гэндальф ШтормВорона
источник
Я полагаю, вы используете 64-битную версию Windows? Если нет, вы не собираетесь указывать размер кучи больше 1,5 ГБ, другие окна 0,5 ГБ, которые можно использовать напрямую, потребуются JVM. Существует возможность заставить Windows использовать только 1G для кода режима ядра и 3G для кода пользовательского режима, но Sun JVM не позволит вам использовать его.
vickirk
@vickirk Я использую 64-битную версию Windows
Гэндальф StormCrow
1
Вы также используете 64-битную версию JVM? Он будет указан как Windows x64 в раскрывающемся списке на странице загрузки JDK: java.sun.com/javase/downloads/widget/jdk6.jsp
Powerlord

Ответы:

117

MAVEN_OPTSНапример, устанавливаемая переменная среды MAVEN_OPTS=-Xmx1024m. maxmemКонфигурации в П применяется только тогда , когда вы устанавливаете плагин компилятора для вилки javacв новую JVM. В противном случае плагин работает внутри той же виртуальной машины, что и Maven, и, следовательно, в памяти, переданной в командной строке через файл MAVEN_OPTS.

Чтобы установить MAVEN_OPTS в Windows 7:

  1. Щелкните правой кнопкой мыши « Мой компьютер» и выберите « Свойства» (сочетание клавиш нажмите Windows+ Pause/Break).
  2. Щелкните ссылку « Дополнительные параметры системы», расположенную на левой панели навигации «Свойства системы», чтобы отобразить дополнительные свойства системы.
  3. Перейти к Расширенный вкладке и нажмите на переменные окружения кнопку , расположенную в нижней части Advanced System Properties окна конфигурации
  4. Создайте новую пользовательскую переменную, установите имя переменной на MAVEN_OPTS и установите значение переменной на -Xmx1024m(или более)

Откройте новое командное окно и запустите mvn.

Паскаль Тивент
источник
1
Влияет ли это на скорость моей сборки? Есть ли какой-нибудь совет, чтобы улучшить мою сборку maven, выделив для нее больше памяти?
Махендран
45

Если во время надежного (или отказоустойчивого) тестирования 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>
Шатер
источник
Это действительно сэкономило мне время! Благодарность! К сожалению, я могу проголосовать только один раз! :)
javanna
Это самый полезный ответ среди других в реальном стиле maven. Благодарность!
Андремоний
Это фактический ответ на вопрос
Джонатан Ландрам
1
Смотрите документацию на surefire. В версиях surefire до 2.14 для настройки разветвления использовался параметр forkMode. Хотя этот параметр все еще поддерживается для обратной совместимости, пользователям настоятельно рекомендуется перенести свою конфигурацию и вместо этого использовать forkCount и reuseForks.
johnstosh
21

Это должна быть та же команда, за исключением SET вместо EXPORT.

  • set MAVEN_OPTS = -Xmx512m даст ему 512 МБ кучи
  • set MAVEN_OPTS = -Xmx2048m даст ему 2 ГБ кучи
corsiKa
источник
Я согласен с тем, что это должна быть та же команда, но это не соответствует действительности, вот почемуC:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
Гэндальф СтормКроу
светящийся кодер немного не прав. Вам не нужно ЭКСПОРТИРОВАТЬ переменные, но чтобы присвоить им значение, вам нужно установить.
JeremyP
Вы также можете установить MAVEN_OPTS в качестве переменной среды Windows, если хотите использовать одни и те же значения для каждой сборки.
digitaljoel
@Gandalf, вам нужно поставить перед ним набор @Jeremy, да, именно поэтому он говорит, что нужно использовать набор вместо экспорта
corsiKa
9

На Mac: вместо JAVA_OPTSи MAVEN_OPTSиспользуйте _JAVA_OPTIONS. Это работает!

Стив
источник
это работает также с окнами. Добавьте это как переменную среды в конфигурацию запуска maven в eclipse, тесты, запущенные из m2e, больше не выдают ошибку
PermGen
3

После неудачной попытки использовать переменную MAVEN_OPTS я наткнулся на этот сайт, который у меня работал. Поэтому все, что мне нужно было сделать, это добавить -Xms128m -Xmx1024m к параметрам виртуальной машины по умолчанию, и это сработало.

Чтобы изменить их в Eclipse, перейдите в Window -> Preferences -> Java -> Installed JREs. Выберите отмеченный JRE / JDK и нажмите «Изменить».

kent_e
источник
0

В окнах:

Добавьте переменную окружения (как в системных, так и в пользовательских переменных, у меня есть странная проблема, потому что она получает переменную из разных мест, поэтому я добавляю их в обе).

Назовите его MAVEN_OPTS.

Значение будет: -Xms1024m -Xmx3000m -XX:MaxPermSize=1024m -XX:+CMSClassUnloadingEnabled

Цифры могут быть разными, делайте их в соответствии с размером вашей памяти.

У меня была эта проблема, и это исправило ее, больше ничего!

Hrabia
источник
0

Это сработало - чтобы изменить в Eclipse, перейдите в Window -> Preferences -> Java -> Installed JREs. Выберите отмеченный JRE / JDK и нажмите «Изменить».

Аргументы виртуальной машины по умолчанию = -Xms128m -Xmx1024m

Анади Кумар
источник
-7

Вы ищете 2 варианта java:

  • -Xmx максимальный размер кучи
  • -Xms начальный размер кучи

Поместите их в вызов javaисполняемого файла из командной строки , например:

java -Xms512M -Xmx1024M my.package.MainClass

Имейте в виду, что вы можете захотеть, чтобы начальный и максимальный размеры кучи были одинаковыми в зависимости от приложения, поскольку это позволяет избежать изменения размера кучи во время выполнения (что может занять время в приложениях, которые должны реагировать). Изменение размера кучи может повлечь за собой перемещение большого количества объектов и переделку бухгалтерии.

Для повседневных проектов делайте то, что считаете достаточно хорошим. Профиль для помощи.

Фил
источник
1
как утверждает ebelisle, эти параметры вообще не будут работать, поскольку вы, используя Maven, должны указать, по крайней мере, что это параметр Maven с «-D», но все же не является командой java, о которой мы говорим
frandevel