Размер кучи Java увеличивается в 10 раз по сравнению с используемой кучей

Я профилирую процесс Java с помощью VisualVM и обнаружил, что, хотя моя используемая куча постоянно остается ниже 100 МБ, размер кучи продолжает увеличиваться до точки, при которой он в 10 раз больше, чем используемая куча!

Чтение из документов:

By default, the virtual machine grows or shrinks the heap at each collection to try to keep the proportion of free space to live objects at each collection within a specific range. This target range is set as a percentage by the parameters -XX:MinHeapFreeRatio= and -XX:MaxHeapFreeRatio=, and the total size is bounded below by -Xms and above by -Xmx.

Итак, учитывая, что MinHeapFreeRatio и MaxHeapFreeRatio установлены на 40% и 70% соответственно, почему это происходит?

Размер кучи Java увеличивается в 10 раз по сравнению с используемой кучей

вам следует включить ведение журнала GC и посмотреть журналы. Возможно, visualvm не учитывает наличие объектов, которые умирают в eden.

the8472 17.03.2018 00:26

Когда GC ведет себя неожиданным образом, это может быть связано с комбинацией параметров командной строки, которые вы использовали. Я бы попробовал это еще раз с тем, что, по вашему мнению, является минимумом для запуска процесса.

Peter Lawrey 17.03.2018 13:36

Я уже несколько дней выполняю этот процесс с -Xmx128m, без каких-либо ошибок памяти или снижения производительности, поэтому все еще трудно понять, почему JVM продолжала увеличивать кучу, когда Xmx не был установлен. @PeterLawrey Я не устанавливал никаких других параметров JVM.

Alphaaa 19.03.2018 15:05

Максимальное значение по умолчанию - 1/4 основной памяти. Я согласен с тем, что JVM, похоже, не нуждается в этом и не должна расти так, как есть.

Peter Lawrey 19.03.2018 15:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
443
0

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