Устранение ошибки MaxPermSize в Java 8 и Maven: руководство
Быстрый ответ
Предупреждение указывает на то, что параметр MaxPermSize
устарел и больше не поддерживается. Начиная с версии Java 8, пространство PermGen заменено на Metaspace. Вместо MaxPermSize
следует использовать опцию -XX:MaxMetaspaceSize
:
-XX:MaxMetaspaceSize=256m
Необходимо проверить и обновить настройки MAVEN_OPTS
в ваших проектах на Maven, удалив параметры -XX:MaxPermSize
, чтобы обеспечить совместимость с Java 8.
Понимаем 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 (🎮):
Старый смартфон (📱): [Приложение PermSize 🎮, Приложение MaxPermSize 🎮]
Теперь у вас есть умное ТВ (🖥️), которое уже не поддерживает старые приложения:
-XX:MaxPermSize=256m // Это похоже на попытку установить игру 'Angry Birds' на умное ТВ.
🚫⚠️ Предупреждение — это способ сообщения ТВ:
Внимание: 🖥️ не поддерживает игры с 📱. Попробуйте использовать Netflix или Hulu!
Java VM теперь выбирает быстрый и современный Metaspace, который более похож на Netflix!
Полезные материалы
- Руководство по настройке сборщика мусора HotSpot VM версии 8 — Подробное руководство по оптимизации Garbage Collector в HotSpot VM.
- Документация JDK версии 21 — Официальная документация Oracle для последних версий Java Development Kit.
- Куда исчез PermGen в Java? — Историческое обозрение ухода PermGen.
- Java 8: Замена PermGen на Metaspace — Обзор процесса замены PermGen на Metaspace в Java 8.