Подтвердить что ты не робот

Значение пространства PermGen

Каково значение пространства PermGen в java?

4b9b3361

Ответ 1

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

Это оптимизация коллекции мусора - если объекты, которые мы не ожидаем собирать мусор, хранятся отдельно, он уплотняет пространство, в котором хранятся остальные объекты, что приводит к меньшему количеству работы для сборщика мусора.

Ответ 2

PermGen специфичен для виртуальных машин, имеющих коллекцию мусора для генерации.

Если вы используете, скажем, JRockit, "значение PermGen" не существует, потому что JRockit не имеет этой концепции.

Он используется, чтобы быть обычным, несколько лет назад, когда возникли странные "из пространства пространства Пермигена" и что никто не знал, чья это ошибка (Tomcat + Hibernate + Sun VM использовал для запуска этого), чтобы заменить один компонента (в настоящее время проблемы понятны, но много лет назад, когда они начали обрезку, вряд ли можно было найти информацию об этом). Вы можете заменить Tomcat смолой или Sun VM с помощью JRockIt и т.д.

Я думаю, важно отметить, что PermGen не является частью спецификаций Java и только деталью реализации (совершенно) некоторых виртуальных машин.

Ответ 3

Единственное, что вам действительно нужно знать, это то, что пространство PermGen отделено от общей кучи и не зависит от параметра -Xmx VM. Если у вас есть приложение, которое загружает множество определений классов (например, сервер приложений или IDE), вы можете установить размер пространства PermGen с помощью опции -XX:MaxPermSize VM.

Ответ 4

Постоянное поколение содержит метаданные, описывающие классы пользователей (классы, которые не являются частью языка Java).

Приложения с большой базой кода могут заполнить этот сегмент кучи, который вызовет java.lang.OutOfMemoryError: PermGen. На это не влияет настройка -Xmx или объем памяти на компьютере. Чтобы установить новый начальный размер, используйте -XX:PermSize=64m. Чтобы установить максимальный размер, используйте -XX:MaxPermSize=128m