Что делает -XX: MaxPermSize?

169

В частности, почему это поможет устранить проблему PermGen OutOfMemoryError?

Кроме того, бонусные баллы за ответ, который указывает мне на документацию по аргументам JVM...

  • 0
    mark.koli.ch/2009/01/...
  • 5
    oracle.com/technetwork/java/javase/tech/… Как вы дадите мне эти бонусные баллы сейчас? :)
Показать ещё 3 комментария
Теги:
jvm
jvm-arguments

4 ответа

208
Лучший ответ

Постоянное пространство - это где классы, методы, интернализированные строки и аналогичные объекты, используемые виртуальной машиной, хранятся и никогда не освобождаются (отсюда и название).

Эта статья в Oracle кратко описывает работу и параметризацию GC HotSpot и советует вам увеличить это пространство, если вы загружаете много классов (это как правило, для серверов приложений и некоторых IDE, таких как Eclipse):

Постоянное поколение не оказывает заметного влияния на мусор производительность коллектора для большинства приложений. Однако некоторые приложения динамически генерируют и загружают многие классы; например, некоторые реализации страниц JavaServer Pages (JSP). Эти приложениям может потребоваться большее постоянное поколение для дополнительные классы. Если да, то максимальный размер постоянной генерации может увеличьте с помощью опции командной строки -XX: MaxPermSize =.

Обратите внимание, что эта другая документация Oracle содержит список других аргументов HotSpot.

Обновление: Начиная с Java 8, как пространство имен, так и этот параметр исчезли. Модель памяти, используемая для загруженных классов и методов, отличается и не ограничена (с настройками по умолчанию). Вы больше не должны видеть эту ошибку.

72

-XX: PermSize -XX: MaxPermSize используются для установки размера для постоянного поколения.

Постоянное поколение: постоянное поколение - это где хранятся файлы классов. Это результат скомпилированных классов и jsp-страниц. Если это пространство заполнено, оно вызывает полную сборку мусора. Если сборка Full Garbage Collection не может очистить старые классы без ссылок, и нет места для расширения Постоянного пространства, будет выбрана ошибка вне памяти (OOME), и JVM выйдет из строя.

  • 9
    +1 за конкретные ошибки и сроки того, что происходит.
34

В Java 8 этот параметр обычно используется для печати предупреждающего сообщения, подобного этому:

Java HotSpot (TM) 64-разрядное предупреждение сервера VM: игнорирование опции MaxPermSize = 512m; поддержка удалена в 8.0

Причина, по которой вы получаете это сообщение в Java 8, состоит в том, что Permgen был заменен на Metaspace для устранения некоторых недостатков PermGen (как вы могли убедиться сами, один из этих недостатков - фиксированный размер).

FYI: статья о Metaspace: http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html

1

MaxPermSize - это максимальный размер для кучи постоянного поколения, куча, которая содержит байтовый код классов и хранится отдельно от кучи объекта, содержащей фактические экземпляры.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню