Я профилирую процесс 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% соответственно, почему это происходит?
Когда GC ведет себя неожиданным образом, это может быть связано с комбинацией параметров командной строки, которые вы использовали. Я бы попробовал это еще раз с тем, что, по вашему мнению, является минимумом для запуска процесса.
Я уже несколько дней выполняю этот процесс с -Xmx128m, без каких-либо ошибок памяти или снижения производительности, поэтому все еще трудно понять, почему JVM продолжала увеличивать кучу, когда Xmx не был установлен. @PeterLawrey Я не устанавливал никаких других параметров JVM.
Максимальное значение по умолчанию - 1/4 основной памяти. Я согласен с тем, что JVM, похоже, не нуждается в этом и не должна расти так, как есть.




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