我想计算JVM堆的已用内存。我在示例应用程序中执行了以下操作。
将JVM堆大小设置为Xms = 200mb且Xmx = 200mb。
使用Java Runtime API进行如下计算。它给了我以下示例程序的输出。
运行时总内存:192413696
运行时最大内存:192413696
无运行时内存:39734096
运行时可用内存=(最大 - 总计+免费)= 39734096
已用内存百分比= 100 *(最大可用)/最大= 100 *(192413696- 39734096)/ 192413696 = 79.35%
通过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%
请你帮我解决一下这个问题?
使用JMX和Java Runtime API之间区别的原因是什么?
如果我想知道我的JVM堆中占用的内存是正确的方法(第2点或第3点)。我的目的是在我的JVM发生内存不足之前发出警报。
我还有另一个观察。当我使用CMS算法(-Xms和-Xms设置为32GB,占用率设置为70%)时,我可以看到使用MBeans计算的空闲内存与java运行时freeMemory()之间的差异。当我使用G1时,我找不到这些差异(Mbeans和运行时API给出相同的值)。
答案 0 :(得分:0)
$varArray = explode( '/', $var );
答案 1 :(得分:-1)
计算应该是 usedMemory / MaxMemory * 100
Used Memory = 127737896
Max Memory = 201850880
127737896 / 201850880 * 100 = 63.28%