Устранение PermGen в JDK 8
Я установил JDK 8 и пытаюсь запустить Eclipse. Я получаю следующее предупреждение:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
каковы причины игнорирования этого аргумента?
6 ответов
причины игнорирования этого аргумента-постоянное поколение было удалено в HotSpot для JDK8 из-за следующих недостатков
- фиксированный размер при запуске – сложно настроиться.
- внутренние типы точек доступа были объектами Java: могли перемещаться с полным GC, непрозрачными, не сильно типизированными и трудными для отладки, необходимыми метаданными.
- упростить полные коллекции: специальные итераторы для метаданных для каждого коллектора
- хотите освободить данные категории одновременно, а не во время паузы GC
- включить будущие улучшения, которые были ограничены PermGen.
пространство постоянного поколения (PermGen) полностью удалено и заменено новым пространством под названием Metaspace. Последствия удаления PermGen-это, очевидно,Аргументы PermSize и MaxPermSize JVM игнорируются и вы никогда не получите java.ленг.OutOfMemoryError: PermGen ошибка.
преимущества MetaSpace
- воспользуйтесь свойством спецификации языка Java: классы и связанные с ними метаданные жизни соответствуют классу загрузчика
- в зону хранения затяжелителя-Metaspace
- только линейное распределение
- нет отдельного рекламации (за исключением Переопределений и сбоя загрузки класса)
- нет сканирования GC или уплотнения
- нет перемещения для metaspace объекты
Настройки Metaspace
максимальный размер метапространства может быть установлен с помощью флага-XX: MaxMetaspaceSize, а по умолчанию неограничен, что означает, что только ваша системная память является пределом. Флаг настройки-XX: MetaspaceSize определяет начальный размер метапространства если этот флаг не указан, Метапространство будет динамически изменять размер в зависимости от спроса приложения во время выполнения.
изменение включает другие оптимизации и особенности в будущем
- совместное использование данных класса приложений
- оптимизация молодой коллекции, выгрузка класса G1
- сокращения размера метаданных и внутренние проекты JVM footprint
также улучшена производительность GC. более подробно
Это одна из новых функций Java 8, часть предложения по улучшению JDK 122:
удалите постоянное поколение из Hotspot JVM и, таким образом, необходимо настроить размер постоянного поколения.
список всех JEP, которые будут включены в Java 8, можно найти на JDK8 вехи страница.
пространство постоянного поколения (PermGen) полностью удалено и заменено новым пространством под названием Metaspace.Последствия удаления PermGen заключаются в том, что, очевидно, аргументы PermSize и MaxPermSize JVM игнорируются, и вы никогда не получите java.lang.OutOfMemoryError
: ошибка PermGen.
JDK 8 HotSpot JVM теперь использует собственную память для представления метаданных класса и называется Metaspace. Подробнее>>
PermGen пространства заменяется MetaSpace в Java 8. Аргументы PermSize и MaxPermSize JVM игнорируются и выдается предупреждение, если они присутствуют при запуске.
большинство выделений для метаданных класса теперь выделяются из собственной памяти. * Классы, которые использовались для описания метаданных классов, были удалены.
основное различие между старым PermGen и новым MetaSpace, вы не должны обязательно определить верхний предел использования памяти. Вы можете сохранить MetaSpace предел пространства неограничен. Таким образом, при увеличении использования памяти вы не получите ошибку OutOfMemoryError. Вместо этого зарезервированная собственная память увеличивается до полного заполнения увеличения использования памяти.
вы можете определить максимальный предел пространства для MetaSpace, а затем он выбросит OutOfMemoryError : Metadata space. Поэтому важно осторожно определить этот предел, чтобы избежать потери памяти.
реализация JVM Oracle для Java 8 избавилась от модели PermGen и заменила ее на Metaspace.