Устранение ошибки MaxPermSize в Java 8 и Maven: руководство

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Предупреждение указывает на то, что параметр MaxPermSize устарел и больше не поддерживается. Начиная с версии Java 8, пространство PermGen заменено на Metaspace. Вместо MaxPermSize следует использовать опцию -XX:MaxMetaspaceSize:

Java
Скопировать код
-XX:MaxMetaspaceSize=256m

Необходимо проверить и обновить настройки MAVEN_OPTS в ваших проектах на Maven, удалив параметры -XX:MaxPermSize, чтобы обеспечить совместимость с Java 8.

Кинга Идем в IT: пошаговый план для смены профессии

Понимаем Metaspace

В Java 8 была проведена серьезная переработка модели памяти, в ходе которой от PermGen было решено отказаться. Метаданные классов теперь размещаются в нативной памяти, называемой Metaspace.

Metaspace против PermGen

Переход от параметра MaxPermSize к опции -XX:MaxMetaspaceSize можно сравнить с заменой старого велосипеда на современный гидроцикл — это комплексно новая и более совершенная система управления нативной памятью.

Рациональная настройка

При использовании -XX:MaxMetaspaceSize следует быть сдержанным:

  • Слишком большой размер памяти может привести к ненужным затратам ресурсов.
  • Чрезвычайно маленький размер может вызвать ошибки OutOfMemoryError: Metaspace.
  • Обычно рекомендуется использовать значение по умолчанию, меняя его только после детального мониторинга использования памяти.

Переход на Java 8

При переходе на Java 8 убедитесь, что вы удалили настройки -XX:PermSize и -XX:MaxPermSize, а также ознакомились с параметрами -Xms и -Xmx.

Корпоративные приложения

Если вы работаете с JBoss EAP 6.4 или схожими системами, удостоверьтесь, что ваши стартовые скрипты корректно работают с Metaspace.

Советы по улучшению производительности Metaspace

Установите начальный размер Metaspace, используя -XX:MetaspaceSize. Для мониторинга используйте, например, Java Mission Control. В случае ошибок типа OutOfMemoryError создавайте дамп heap-памяти для анализа ее использования.

Быть в курсе новшеств в управлении памятью Java очень важно для разработчиков.

Произведение необходимых корректировок

Чтобы избавиться от устаревших настроек, проанализируйте аргументы JVM и файлы pom.xml. Переход на Java 8 и более поздние версии, а также обновление опций JVM и исключение таких параметров, как MaxPermSize, позволит оптимизировать рабочую среду и повысить эффективность управления памятью.

Визуализация

Теперь представьте Java VM как старый смартфон (📱), на котором устанавливались приложения для PermGen (🎮):

Markdown
Скопировать код
Старый смартфон (📱): [Приложение PermSize 🎮, Приложение MaxPermSize 🎮]

Теперь у вас есть умное ТВ (🖥️), которое уже не поддерживает старые приложения:

Java
Скопировать код
-XX:MaxPermSize=256m // Это похоже на попытку установить игру 'Angry Birds' на умное ТВ.

🚫⚠️ Предупреждение — это способ сообщения ТВ:

Markdown
Скопировать код
Внимание: 🖥️ не поддерживает игры с 📱. Попробуйте использовать Netflix или Hulu!

Java VM теперь выбирает быстрый и современный Metaspace, который более похож на Netflix!

Полезные материалы

  1. Руководство по настройке сборщика мусора HotSpot VM версии 8 — Подробное руководство по оптимизации Garbage Collector в HotSpot VM.
  2. Документация JDK версии 21 — Официальная документация Oracle для последних версий Java Development Kit.
  3. Куда исчез PermGen в Java? — Историческое обозрение ухода PermGen.
  4. Java 8: Замена PermGen на Metaspace — Обзор процесса замены PermGen на Metaspace в Java 8.