如何计算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 命令会给你这么多信息。
PID
USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEM
TIME+ COMMAND
只需输入
top
然后回车
在您的终端中并在命令部分检查 java 。
如果我使用 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 命令会给你这么多信息。
PID
USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEM
TIME+ COMMAND
只需输入
top
然后回车
在您的终端中并在命令部分检查 java 。