Вопрос проверяет понимание управления памятью JVM и эволюции механизма хранения метаданных классов.
Metaspace — это область памяти JVM для хранения метаданных классов, появившаяся вместо PermGen. В отличие от PermGen, Metaspace использует нативную память, а не heap. Это снижает риск OutOfMemoryError из-за фиксированного размера. Размер Metaspace может динамически расти. Управление стало более гибким и предсказуемым.
В JVM существуют специальные области памяти для хранения служебной информации о классах.
PermGen (Permanent Generation) — это область памяти в heap, где ранее хранились:
метаданные классов
информация о методах
пул строк (частично)
Основные проблемы PermGen:
фиксированный размер
частые OutOfMemoryError
сложная настройка под разные приложения
Metaspace — это замена PermGen, начиная с Java 8.
Ключевые особенности:
использует нативную память
не входит в heap
может динамически расширяться
освобождает память при выгрузке классов
Основные различия заключаются в подходе к управлению памятью:
PermGen ограничен заранее
Metaspace растет по мере необходимости
Metaspace легче диагностировать и настраивать
Размер можно ограничить параметрами:
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
Вывод: Metaspace устранил ключевые ограничения PermGen и сделал управление метаданными классов более надежным.