计算JVM的已用内存

时间:2016-05-10 13:24:14

标签: java memory jvm heap

我想计算JVM堆的已用内存。我在示例应用程序中执行了以下操作。

  1. 将JVM堆大小设置为Xms = 200mb且Xmx = 200mb。

  2. 使用Java Runtime API进行如下计算。它给了我以下示例程序的输出。

    运行时总内存:192413696

    运行时最大内存:192413696

    无运行时内存:39734096

    运行时可用内存=(最大 - 总计+免费)= 39734096

    已用内存百分比= 100 *(最大可用)/最大= 100 *(192413696-    39734096)/ 192413696 = 79.35%

  3. 通过JMX做了另一次计算:java.lang:type = Memory(Using MBean)

    It gave me following output for the same program.
    
    Used memory : 127737896
    
    Max memory : 201850880
    
    Percentage of used memory = 100*(used/max) = 100* (127737896/201850880)= 
    63.28%
    
  4. 请你帮我解决一下这个问题?

    1. 使用JMX和Java Runtime API之间区别的原因是什么?

    2. 如果我想知道我的JVM堆中占用的内存是正确的方法(第2点或第3点)。我的目的是在我的JVM发生内存不足之前发出警报。

    3. 我还有另一个观察。当我使用CMS算法(-Xms和-Xms设置为32GB,占用率设置为70%)时,我可以看到使用MBeans计算的空闲内存与java运行时freeMemory()之间的差异。当我使用G1时,我找不到这些差异(Mbeans和运行时API给出相同的值)。

2 个答案:

答案 0 :(得分:0)

$varArray = explode( '/', $var );

答案 1 :(得分:-1)

计算应该是 usedMemory / MaxMemory * 100

Used Memory = 127737896
Max Memory = 201850880

127737896 / 201850880 * 100 = 63.28%