如何计算java程序的内存使用量?

Gan*_*h S 14 java memory-management runtime

如果我使用Runtime(freememory()和totalmemory()和gc())类,那么它会给我高于mb的内存(即1000000字节).

但是如果我在任何在线编译器上运行相同的代码,那么它们会显示kb中使用的内存(即1000字节).这是巨大的差异.

这意味着运行时不显示程序使用的实际内存.

我需要计算程序使用的实际内存.这些在线编译器用于计算程序使用的内存的方式是什么?

Ami*_*ati 23

首先计算代码执行前使用的内存,即代码的第一行.

long beforeUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();
Run Code Online (Sandbox Code Playgroud)

计算代码执行后使用的内存: -

long afterUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

long actualMemUsed=afterUsedMem-beforeUsedMem;
Run Code Online (Sandbox Code Playgroud)

它将为您提供程序使用的实际内存.

对于进一步的内存分析,您最好的选择是任何分析器工具,如jvisualvm.

  • 请记住,Runtime.getRuntime().totalMemory(),此内存是JVM可用的总内存.
  • java -Xms512m -Xmx1024m,这意味着程序的总内存将以512MB开始,可能会懒得加载到最大1024MB.
  • 因此,如果您在不同的JVM上运行相同的程序,Runtime.getRuntime().totalMemory()可能会给您不同的结果.


Roh*_*pta 5

您可以在ubuntu中使用top命令来检查运行java程序时%CPU使用率或%内存使用率.

top命令会给你这些很多信息.

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

只需 top在终端输入并按Enter键,然后在命令部分查看java.