Java, как отслеживать и настраивать пространство сжатия класса

Мы используем JDK 8, и некоторые из наших процессов предоставляют OOM с "сжатым пространством классов". Мы регистрируем GC, и наш файл jvm statistics.log в настоящее время предоставляет следующий тип записей журнала

2017-06-30 03:57:07,944 ИНФОРМАЦИЯ - HEAP - [ИСПОЛЬЗОВАНИЕ: 1678,7, БЕСПЛАТНО: 986,7, ИТОГО: 2665,5, МАКС: 2665,5]; PERM - [ИСПОЛЬЗОВАНИЕ: N/A, БЕСПЛАТНО: N/A, MAX: N/A]; КЛАССЫ - [загружено: 1832624, выгружено: 637, слева: 1831987]; РЕЗЬБЫ - [Количество: 92]

Нам интересно, если бы добавление флагов "-XX:+TraceClassUnloading -XX:+TraceClassLoading" позволило бы нам узнать, какое значение мы должны установить для "пространства сжатых классов" ( -XX: CompressedClassSpaceSize)? Если да, как мы определяем размер из журналов трассировки?

1 ответ

Ты можешь использовать -XX:-UseCompressedClassPointers отключить сжатое пространство классов, которое должно позволить JVM загружать столько классов, сколько умещается в памяти, вместо области виртуальной памяти ограниченного сжатого класса. Недостатком являются большие указатели классов в заголовках объектов.

Но, как упомянул @Holger в комментариях, вы должны убедиться, что ваше приложение не пропускает классы с течением времени, иначе потребление памяти будет расти.

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