Как рассчитать использование памяти Java-программой?

Если я использую класс Runtime (freeMemory(), totalMemory() и gc()), то он дает мне объем памяти выше МБ (т.е. 1 000 000 байтов).

Но если я запускаю один и тот же код на любом онлайн-компиляторе, тогда они показывают объем памяти, используемый в КБ (то есть 1000 байтов). Это огромная разница.

Это означает, что Runtime не показывает фактическую память, используемую программой.

Мне нужно рассчитать фактическую память, используемую программой. Как эти онлайн-компиляторы используют для вычисления памяти, используемой программой?

Ответ 1

Сначала вычислите память, используемую до выполнения вашего кода, т.е. первую строку вашего кода.

long beforeUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();

Вычислить память, используемую после выполнения кода: -

long afterUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();

Затем вы можете сделать:

long actualMemUsed=afterUsedMem-beforeUsedMem;

Это даст вам реальную память, используемую вашей программой.

Для дальнейшего анализа памяти лучше всего использовать любой инструмент профилирования, например jvisualvm.

  • Помните, что Runtime.getRuntime(). totalMemory(), эта память полная память, доступная вашей JVM.
  • java -Xms512m -Xmx1024m, это означает, что общая память вашей программы начнется с 512 МБ, который может лениво загружаться до максимальной 1024 МБ.
  • Итак, если вы используете ту же программу, на разных JVM, Runtime.getRuntime(). TotalMemory() может дать вам разные результаты.

Ответ 2

Вы можете использовать команду top в ubuntu, чтобы проверить использование% использования процессора или использование% памяти во время работы программы java.

Команда

top даст вам много информации.

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

просто введите top и нажмите Enter в вашем терминале и проверить java в разделе команд.