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