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