Установка пространства кучи 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 ГБ кучи

Я согласен с тем, что это должна быть та же команда, но это не соответствует действительности, вот почему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 и нажмите «Изменить».


0

В окнах:

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

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

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

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

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.