如何计算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命令将为您提供这些信息
PIDUSER
PR
NI
VIRT
RES
SHR
%MEM
时间+命令
打字
top
点击回车键
在终端中,检查命令部分中的java 哪种在线编译器?一般来说:如果您需要了解应用程序的性能/内存“行为”,那么您需要认真研究分析工具。你要观察一段时间。使用问题中提到的调用获取一次性快照只能提供非常有限的信息。@Onur codechef.com/ide是我一直在寻找的编译方法。如果方法创建大量临时对象,简单的减法可能会产生不相关的数据。实际内存消耗取决于清除所有冗余对象的gc。如果垃圾回收在执行函数时启动怎么办?