Предупреждение виртуальной машины 64-разрядного сервера Java HotSpot (TM): игнорирование параметра MaxPermSize

133

При создании проекта Java 8 с Maven:

mvn clean package

Я получаю это сообщение:

Предупреждение о виртуальной машине на 64-разрядном сервере Java HotSpot (TM): игнорирование параметра MaxPermSize = 128m; поддержка была удалена в 8.0

Как удалить это сообщение?

Борис
источник
2
См. Bugs.java.com/bugdatabase/view_bug.do?bug_id=6964458 для полного описания
Даг
1
Возможно, у вас уже запущен один экземпляр IDEA. [1]: stackoverflow.com/a/20553943/3741698
Дэвид Хакро,

Ответы:

163

В Руководстве по совместимости для JDK 8 говорится, что в Java 8 флаг командной строки MaxPermSizeбыл удален. Причина в том, что постоянное поколение было удалено из кучи горячей точки и перенесено в собственную память. Поэтому, чтобы удалить это сообщение, отредактируйте переменную пользователя среды MAVEN_OPTS :

Java 7

MAVEN_OPTS -Xmx512m -XX:MaxPermSize=128m

Java 8

MAVEN_OPTS -Xmx512m
Борис
источник
13
И причина в том, что все пространство PermGen было удалено в JRE 8 Oracle, AFAIK.
Puce
1
Если кто не знает, как это сделать - sudo gedit ~/.profileдобавьте туда строчку из ответа и сохраните файл.
получил
У меня есть эта опция в файле ~ / .bashrc
paka
@gotqn Зачем вам sudoредактировать файл в вашей домашней папке? Похоже, очень странная практика для меня.
Пер Лундберг,
22

JDK 8 HotSpot JVM теперь использует встроенную память для представления класса метаданных и называется Метапространством .

Постоянное поколение было удалено. PermSizeИ MaxPermSizeигнорируются , и выдается предупреждение , если они присутствуют в командной строке.

Мартин Зилер
источник
Это только косвенно отвечает на вопрос ... Ответ «убрать флажки, чтобы убрать предупреждение». Как проницательный комментарий по @ Ohad-Шнайдер показывает, что нет один одиночной замены для них.
Конни
10
-XX:MaxPermSize=size

Устанавливает максимальный постоянный размер пространства генерации (в байтах). Эта опция устарела в JDK 8 и заменена этой -XX:MaxMetaspaceSizeопцией.

-XX:PermSize=size

Устанавливает пространство (в байтах), выделенное для постоянной генерации, которая запускает сборку мусора, если она превышена. Эта опция устарела в JDK 8 и заменена этой -XX:MetaspaceSizeопцией.

мама ...
источник
12
Я думаю , что это было downvoted , потому что это означает , что вы должны переключить предыдущие использования MaxPermGenс MaxMetaSpaceSizeкоторых вводит в заблуждение, так как их роли практически наоборот. До этого пространство метаданных класса Java 8 находилось в PermGen, которое было ограничено 32/64 МБ и MaxPerGenиспользовалось для его увеличения . Однако, начиная с Java 8, PermGen больше не существует, и пространство метаданных класса не ограничено, поэтому MaxMetaspaceразмер фактически используется для его уменьшения . Для получения дополнительной информации см .: stackoverflow.com/a/31463972/67824
Охад Шнайдер
8

В JBoss EAP 6.4 щелкните правой кнопкой мыши по серверу и откройте конфигурацию запуска под аргументом VM, который вы найдете

{-Dprogram.name=JBossTools: jboss-eap" -server -Xms1024m -Xmx1024m -XX:MaxPermSize=256m}

обновить его до

{-Dprogram.name=JBossTools: JBoss 6.4" -server -Xms512m -Xmx512m}

это решит вашу проблему.

Amit
источник
1

Я получил похожее сообщение при запуске командной строки mvn (версия 3.3.3) в Linux с Java 8. Открыв сценарий maven / $ MAVEN-HOME / bin / mvn, нашел следующую строку

MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"

Где $ MAVEN_PROJECTBASEDIR по умолчанию является вашим домашним каталогом. Итак, в двух местах вы можете посмотреть, во-первых, это файл $ MAVEN_PROJECTBASEDIR / .mvn / jvm.config, если он существует. Во-вторых, посмотрите на файлы, возможно, установите переменную окружения MAVEN_OPTS. Файлы-кандидаты: .bashrc, .bash_profile, .profile и включенные в них файлы, такие как / etc / profile, /etc/bash.bashrc.

Я нашел

export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m"

в .bashrc в моей системе, измените его на

export MAVEN_OPTS="-Xmx512m"

проблема решена

Джонатан Л
источник
1

в случае, если кто-то все еще получает такое сообщение. Это происходит потому, что вы добавляете аргумент JVM при запуске проекта maven. Поскольку это связано с Maven, вы можете проверить свой pom.xmlфайл в вашем проекте.

найти эту строку <argLine>...</argLine>, на моем проекте у меня также есть аргумент ниже

<argLine>-Xmx1024m -XX:MaxPermSize=512m -XX:+TieredCompilation -XX:TieredStopAtLevel=1</argLine>

Вы должны заменить MaxPermSizeаргумент как -Xms123m -Xmx123m, поскольку MaxPermSizeон уже устарел и не будет влиять на конфигурацию JVM:

<argLine>-Xms512m -Xmx512m  -XX:+TieredCompilation -XX:TieredStopAtLevel=1</argLine>
satrioaditya
источник
-1

Пожалуйста, чтобы решить эту проблему, мы только что установили установленный путь JDK в

standalone.conf

файл, который находится в папке bin сервера JBoss \ Wildfly. Для решения этой проблемы мы делаем следующие шаги:

  1. Откройте файл standlone.conf, который находится в папке JBoss_or_wildfly \ bin
  2. В этом файле найдите текст #JAVA_HOME .
  3. Удалите символ # и установите установленный путь JDK как JAVA_HOME = "C: \ Program Files \ Java \ jdk1.8.0_65". Надеюсь, это решит вашу проблему. Спасибо
Салахин Рокки
источник
Первоначальная проблема в проекте Maven. Это не имеет ничего общего с JBoss.
Борис
-5

Для пользователей Eclipse ...

Нажмите Run -> Run configuration -> are -> установите альтернативный JRE для 1.6 или 1.7

Раджа Раджамани
источник