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

如何计算Java程序的内存使用率?,java,memory-management,runtime,Java,Memory Management,Runtime,如果我使用运行时类(freemory(),totalMemory(),和gc()),那么它会给我超过MB的内存(即1000000字节) 但是,如果我在任何在线编译器上运行相同的代码,那么它们将以KB(即1000字节)为单位显示所使用的内存。这是一个巨大的差异 这意味着运行时不显示程序使用的实际内存 我需要计算程序实际使用的内存。 这些在线编译器使用什么方式计算程序使用的内存?首先计算代码执行前使用的内存,即代码的第一行 long beforeUsedMem=Runtime.getRuntime(

如果我使用
运行时
类(
freemory()
totalMemory()
,和
gc()
),那么它会给我超过MB的内存(即1000000字节)

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

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

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

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

long beforeUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();
计算代码执行后使用的内存:-

long afterUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();
然后你可以做:

long actualMemUsed=afterUsedMem-beforeUsedMem;
它将为您的程序提供实际使用的内存

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

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

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

top命令将为您提供这些信息

PID
USER
PR
NI
VIRT
RES
SHR
%MEM
时间+命令

打字
top
点击回车键
在终端中,检查命令部分中的java

哪种在线编译器?一般来说:如果您需要了解应用程序的性能/内存“行为”,那么您需要认真研究分析工具。你要观察一段时间。使用问题中提到的调用获取一次性快照只能提供非常有限的信息。@Onur codechef.com/ide是我一直在寻找的编译方法。如果方法创建大量临时对象,简单的减法可能会产生不相关的数据。实际内存消耗取决于清除所有冗余对象的gc。如果垃圾回收在执行函数时启动怎么办?