2016-06-20 1 views
6

Если я использую Runtime (freememory() и totalmemory() и gc()), тогда он дает мне память выше mb (т. Е. 1000000 байт).Как рассчитать использование памяти java-программы?

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

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

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

+0

Какой онлайн-компилятор? – Onur

+0

В целом: если вам нужно понять поведение «производительность/память» вашего приложения, вам необходимо серьезно изучить инструменты профилирования. Вы хотите наблюдать со временем. Принимая однократные снимки, используя вызовы, подобные тем, которые упомянуты в вашем вопросе, может дать вам очень ограниченную информацию. – GhostCat

+0

@Onur codechef.com/ide - это тот, который я искал для компиляции. –

ответ

7

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

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

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

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

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

long actualMemUsed=afterUsedMem-beforeUsedMem; 

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

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

  • ли помнить, что Runtime.getRuntime(). TotalMemory(), эта память является общий объем памяти, доступный для вашей виртуальной машины Java.
  • ява -Xms512m -Xmx1024m, это означает, что общий объем памяти вашей программы будет начинаться с 512, который может лениво загружен в макс 1024MB.
  • Так что если вы используете ту же программу, на разных JVM, Runtime.getRuntime(). TotalMemory() может дать вам разные результаты.
+0

Если метод создает огромное количество временных объектов, простое вычитание может привести к неактуальным данным. Фактическое потребление памяти зависит от gc, который очищает все избыточные объекты. – ayvango

3

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

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

PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+ COMMAND

просто введите top и нажмите клавишу ВВОД в вашем терминале & проверки Java в командной секции.

+0

Я хочу программное решение –