ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

MaxPermSize в JDK 8: причины игнорирования и решения

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

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

JDK 8 заменяет область PermGen новым пространством Metaspace, которое динамически масштабируется и использует системную память для хранения метаданных классов. Для его конфигурации используйте параметры -XX:MetaspaceSize и -XX:MaxMetaspaceSize, которые устанавливают начальный размер и максимальный предел для Metaspace соответственно:

-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=1g

Выбор этих значений зависит от особенностей вашего приложения и направлен на достижение оптимальной производительности.

Примечание: Если при запуске приложений вроде Eclipse на JDK 8 появляются устаревшие предупреждения о MaxPermSize, просто проигнорируйте их. Эта опция была устранена с полным осознанием последствий.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Механизм и управление Metaspace

Metaspace — наш новый герой

Metaspace решает множество проблем, связанных с PermGen. Он освобожден от необходимости просканирован быть сборщиком мусора и не требует его уплотнения, что способствует повышению общей производительности сборки мусора. Управление памятью в Metaspace осуществляется непрерывно и эффективно с использованием нативной памяти, что исключает проблемы с ошибками типа java.lang.OutOfMemoryError: PermGen. Metaspace также не ограничен строгими размерами и может расширяться по мере надобности, что оптимизирует работу приложений.

Настройка Metaspace под вашим контролем

Слова известного дяди Бена гласят: "С великой силой приходит великая ответственность". Поэтому при всей гибкости Metaspace важно разумно управлять его размером. Установите начальный размер с помощью -XX:MetaspaceSize и при необходимости ограничьте его максимум при помощи -XX:MaxMetaspaceSize, чтобы предотвратить чрезмерное использование системной памяти. Понимание работы Metaspace — ключ к эффективной настройке JVM, что, безусловно, оценит дядя Бен.

Перспективы развития

Остановка использования PermGen позволяет внедрять новые методы оптимизации JVM и приносит в жизнь инновационные возможности, упрощая потенциальные улучшения в управлении памятью.

Погружение вглубь – PermGen против Metaspace

Мудрые решения JEP 122

JEP 122 обозначил основные недостатки PermGen, такие как утечки памяти и сложности настройки JVM. Переосмысление Metaspace облегчает жизнь разработчиков на Java и совершенствует работу с памятью в JVM.

Новые возможности настройки JVM в JDK 8

Исследуйте другие опции настройки JVM, предлагаемые в JDK 8, ознакамившись с другими JEP. Обзор вех JDK 8 поможет вам ознакомиться со всеми улучшениями, направленными на повышение производительности.

Подробный разбор

Погрузитесь глубже в тему с помощью статьи "java-8-permgen-metaspace", чтобы получить полное понимание функционирования Metaspace.

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

Давайте визуализируем замену PermGen на Metaspace в JDK 8. Это подобно переходу от библиотеки с фиксированным числом полок к цифровой библиотеке с изменяемым пространством:

Библиотека JDK 7 (📚🚫): [Наука 🧪, Искусство 🎨, PermGen 🗃️(Ограниченное пространство)]

PermGen: Место с фиксированным числом полок, вызывавшее OutOfMemoryError.

Библиотека JDK 8 (📱📚): [Наука 🧪, Искусство 🎨, Metaspace 📡(Расширяемое хранилище)]

Metaspace: Как цифровая библиотека с возможностью расширению пространства по необходимости, предотвращает переполнение и оптимизирует управление памятью.

От фиксированных полок к облачному хранению — зачем нам ограничения, если можно без них обойтись?

Ключевая мысль: JDK 8 отказывается от физических ограничений (PermGen) и переходит к гибкой модели хранения (Metaspace) для метаданных классов.

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

  1. Заметки о выпуске Java™ SE Development Kit 8, обновление 20 — Подробности об изменениях в JDK 8, включая отказ от PermGen.
  2. Основы сборки мусора в Java — Объяснения суть работы Metaspace в контексте сборки мусора в Java.
  3. Куда делась область PermGen Java? — Анализ перехода с PermGen на Metaspace в Java 8.
  4. Терминология кучи Java: молодое, старое и постоянные поколения? – Stack Overflow — Дискуссия о PermGen и Metaspace на Stack Overflow.
  5. Документация JDK 21 – Главная — Актуальная документация Java, содержащая информацию об управлении памятью в последних версиях Java.