В частности, почему это поможет исправить проблему PermGen OutOfMemoryError?
Кроме того, бонусные баллы за ответ, который указывает мне на документацию по аргументам JVM ...
В частности, почему это поможет исправить проблему PermGen OutOfMemoryError?
Кроме того, бонусные баллы за ответ, который указывает мне на документацию по аргументам JVM ...
Ответы:
Постоянное пространство - это место, где классы, методы, интернализованные строки и подобные объекты, используемые ВМ, хранятся и никогда не освобождаются (отсюда и название).
В этой статье Oracle кратко представлены работа и параметризация GC HotSpot и советуется увеличить это пространство, если вы загружаете много классов (это обычно имеет место для серверов приложений и некоторых IDE, таких как Eclipse):
Постоянное поколение не оказывает заметного влияния на производительность сборщика мусора для большинства приложений. Однако некоторые приложения динамически генерируют и загружают много классов; например, некоторые реализации страниц JavaServer Pages (JSP). Этим приложениям может потребоваться большее постоянное поколение для хранения дополнительных классов. Если это так, максимальный размер постоянной генерации можно увеличить с помощью параметра командной строки -XX: MaxPermSize =.
Обратите внимание, что в этой другой документации Oracle перечислены другие аргументы HotSpot.
Обновление: Начиная с Java 8, пространство permgen и этот параметр исчезли. Модель памяти, используемая для загруженных классов и методов, отличается и не ограничена (с настройками по умолчанию). Вы не должны больше видеть эту ошибку.
-XX:PermSize -XX:MaxPermSize
используются для установки размера для постоянного поколения.
Постоянное поколение: постоянное поколение - это место, где хранятся файлы классов. Это результат скомпилированных классов и страниц JSP. Если это пространство заполнено, запускается полная сборка мусора. Если полная сборка мусора не может очистить старые классы, на которые нет ссылок, и не осталось места для расширения постоянного пространства, выдается ошибка нехватки памяти (OOME), и JVM падает.
В Java 8 этот параметр обычно используется для печати предупреждающего сообщения, подобного этому:
Предупреждение о виртуальной машине на 64-разрядном сервере Java HotSpot (TM): игнорирование параметра MaxPermSize = 512m; поддержка была удалена в 8.0
Причина, по которой вы получаете это сообщение в Java 8, заключается в том, что Permgen был заменен Metaspace для устранения некоторых недостатков PermGen (как вы могли убедиться сами, одним из этих недостатков является то, что он имеет фиксированный размер).
К вашему сведению: статья о Metaspace: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html