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

How to calculate memory usage of a Java program?

如果我使用 Runtime class(freeMemory()totalMemory()gc()),那么它会给我超过 MB 的内存(即 1,000,000字节)。

但是如果我 运行 在任何在线编译器上使用相同的代码,那么它们会显示以 KB(即 1000 字节)为单位使用的内存。这是一个巨大的差异。

这意味着Runtime不显示程序实际使用的内存。

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

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

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 ,这意味着你的程序的总内存 将从 512MB 开始,可能会延迟加载到最大 1024MB。
  • 所以如果你是 运行 同一个程序,在不同的 JVM 上, Runtime.getRuntime().totalMemory() 可能会给您不同的结果。

您可以在 ubuntu 中使用 top 命令来检查 CPU 使用率或内存使用率 运行 java 节目。

top 命令会给你这么多信息。

PIDUSERPRNIVIRTRESSHRS%CPU %MEMTIME+ COMMAND

只需输入 top 然后回车 在您的终端中并在命令部分检查 java 。