Встановлення місця кучі 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 під windows?


Я припускаю, що ви використовуєте 64-бітну версію Windows? Якщо ні, ви не збираєтеся вказувати більше 1,5G як розмір купи, інші вікна 0,5G, що дозволяють вам використовувати безпосередньо, будуть потрібні JVM. Існує можливість змусити Windows використовувати лише 1G для коду режиму ядра та 3G для коду режиму користувача, але sun JVM не дозволить вам використовувати його.
vickirk

@vickirk Я на 64-бітовій версії Windows
Gandalf 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. Вам потрібно налаштувати надійний вогонь у вашому пом, щоб додати більше пам'яті для 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 за те, що це вказав - вірна технологія дещо змінилася з тих пір, як я виклав цю відповідь. Ось посилання на їх документацію та оновлений зразок коду (рядок аргументу все ще є важливою частиною цього питання):

  <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 до 2.14 використовували параметр forkMode для налаштування форкінгу. Хоча цей параметр все ще підтримується для зворотної сумісності, настійно рекомендується перенести свою конфігурацію та використовувати замість цього forkCount та reuseForks.
Джонстош,

21

Це повинна бути та сама команда, крім SET замість EXPORT

  • set MAVEN_OPTS = -Xmx512m дасть йому 512Mb купи
  • set MAVEN_OPTS = -Xmx2048m дасть йому 2Gb купи

Я погоджуюсь, що це повинна бути та сама команда, але це не означає, що це справжнє твердження, ось чомуC:\my_project>MAVEN_OPTS=-Xmx512m 'MAVEN_OPTS' is not recognized as an internal or external command, operable program or batch file.
Гендальф Штормовий Ворон

glowcoder трохи помиляється. Вам не потрібно ЕКСПОРТУВАТИ змінні, але щоб призначити їм значення, вам потрібно встановити.
JeremyP

Ви також можете встановити MAVEN_OPTS як змінну середовища Windows, якщо ви хочете використовувати однакові значення для кожної збірки.
digitaljoel

@Gandalf вам потрібно поставити набір перед ним @Jeremy так, тому він говорить використовувати набір замість експорту
corsiKa

9

На Mac: Замість JAVA_OPTSта MAVEN_OPTSвикористовуйте _JAVA_OPTIONS. Це працює!


це працює також на вікнах. Додайте це як змінну середовища в конфігурації maven run в eclipse, тести, запущені з m2e, більше не дають помилки
PermGen

3

Після спроби використати змінну MAVEN_OPTS без удачі, я натрапив на цей сайт, який працював у мене. Отже, все, що мені потрібно було зробити, - це додати -Xms128m -Xmx1024m до параметрів ВМ за замовчуванням, і це спрацювало.

Щоб змінити їх у Eclipse, перейдіть до Вікна -> Налаштування -> Java -> Встановлені JRE. Виберіть позначений JRE / JDK і натисніть редагувати.


0

На вікнах:

Додайте змінну середовища (як у системних, так і у змінних користувача, у мене є якась дивна проблема, пов’язана з тим, що вона отримує змінну з різних місць, тому я додаю їх в обидві).

Назвіть його MAVEN_OPTS.

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

Цифри можуть бути різними, зробіть їх відносно вашого розміру пам’яті.

У мене була ця проблема, і це вирішило, нічого іншого!


0

Це спрацювало - Щоб змінити Eclipse, перейдіть до Вікна -> Налаштування -> Java -> Встановлені JRE. Виберіть позначений JRE / JDK і натисніть редагувати.

Аргументи VM за замовчуванням = -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.