Как рассчитать использование памяти 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 в разделе команды.