OutOfMemoryError: сжатое пространство классов

Я получил эту ошибку:

 "java.lang.OutOfMemoryError: Compressed class space"

и пока я не выясню, что такое триггер, я пытался отключить сжатые указатели классов с помощью

-XX:-UseCompressedClassPointers.

но я все еще получаю эту ошибку. как это возможно?

Спасибо!

2 ответа

Решение

Сжатое пространство классов является частью метапространства.

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

Обычно эта ошибка выдается, когда недостаточно места для размещения объекта в куче Java. В этом случае сборщик мусора не может сделать пространство доступным для размещения нового объекта, и куча не может быть расширена дальше. Кроме того, эта ошибка может возникать, когда недостаточно встроенной памяти для поддержки загрузки класса Java. В редких случаях может возникать ошибка java.lang.OutOfMemoryError, когда на сборку мусора уходит слишком много времени и освобождается мало памяти.

Это исключение объясняется в разделе "Описание исключения OutOfMemoryError":

Причина: на 64-битных платформах указатель на метаданные класса может быть представлен 32-битным смещением (с UseCompressedOops). Это контролируется флагом командной строки UseCompressedClassPointers (включено по умолчанию). Если UseCompressedClassPointers используется, объем пространства, доступного для метаданных класса, устанавливается на сумму CompressedClassSpaceSize, Если пространство необходимо для UseCompressedClassPointers превышает CompressedClassSpaceSize, java.lang.OutOfMemoryError с деталями Сжатое пространство класса выбрасывается.

Действие: Увеличить CompressedClassSpaceSize выключить UseCompressedClassPointers, Примечание: существуют границы допустимого размера CompressedClassSpaceSize, Например -XX:CompressedClassSpaceSize=4g Превышение допустимых границ приведет к тому, что сообщение, такое как CompressedClassSpaceSize 4294967296, недопустимо; должно быть между 1048576 и 3221225472.

Другие вопросы по тегам