Java 在Linux中测量内存使用率

Java 在Linux中测量内存使用率,java,linux,runtime,Java,Linux,Runtime,我正在使用以下方法测试代码块的内存消耗: long totalMemory = Runtime.getRuntime().totalMemory(); long freeMemory = Runtime.getRuntime().freeMemory(); 已用内存是totalMemory和freemory之间的差异。我在完全相同的条件下启动并运行了相同的程序三次。但使用的内存量差别很大: 1120M 802M 312M 这可能是什么原因造成的?我应该取这三个值的平均值作为代码的内存使用率吗

我正在使用以下方法测试代码块的内存消耗:

long totalMemory = Runtime.getRuntime().totalMemory();
long freeMemory = Runtime.getRuntime().freeMemory();
已用内存是
totalMemory
freemory
之间的差异。我在完全相同的条件下启动并运行了相同的程序三次。但使用的内存量差别很大:

1120M
802M
312M

这可能是什么原因造成的?我应该取这三个值的平均值作为代码的内存使用率吗?第一次这样做,感谢您对这方面的任何见解。

这是因为java虚拟机(JVM)。Java使用三种类型的memmory结构

  • 堆内存
  • 非堆内存
  • 其他记忆
  • 所以垃圾收集器也在JVM中运行。这也会影响memmory的使用。您可以将此链接引用到更多详细信息


    根据Java运行时库:“totalMemory方法返回的值可能会随着时间的推移而变化,具体取决于主机环境。”我在另一次运行后立即运行,但没有任何变化。因此,您是否在同一jvm上运行每个程序,或者你用自己的jvm调用每个程序?我肯定垃圾收集与此有关。除非您使用实际的工具(例如
    jvisualvm
    jconsole
    )评测代码,否则很难确定。我在Eclipe中运行它,所以每次都使用相同的JVM。