如果我使用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


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

10-07 19:24
查看更多