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

Если я пользователь Runtime (freememory () и totalmemory () и GC ()) класс, то он дает мне память выше Мб (т. е. 1000000 байт).

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

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

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

2 ответов


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

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

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

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

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

long actualMemUsed=afterUsedMem-beforeUsedMem;

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

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

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

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

верхняя команда даст вам эти много информации.

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

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