如果我使用Runtime
类(freeMemory()
、totalMemory()
和gc()
), 那么它会给我超过 MB 的内存(即 1,000,000 字节)。
但是,如果我在任何在线编译器上运行相同的代码,它们会显示以 KB(即 1000 字节)为单位使用的内存。这是一个巨大的差异。
这意味着Runtime
不会显示程序实际使用的内存。
我需要计算程序实际使用的内存。这些在线编译器使用了哪种方法来计算程序使用的内存?
如果我使用Runtime
类(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。
top
命令来查看运行Java程序时的% CPU使用率或%内存使用率。
top
命令将提供以下信息。
PID
USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEM
TIME+ COMMAND
只需在终端中键入top
, 然后按回车键并在命令部分检查Java即可。