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.