我想计算jvm堆的已用内存。我在一个示例应用程序中执行了以下操作。
将jvm堆大小设置为xms=200mb和xmx=200mb。
使用java运行时API进行如下计算。它给了我以下示例程序的输出。
运行时总内存:192413696
运行时最大内存:192413696
运行时可用内存:39734096
运行时可用内存=(最大-总计+可用)=39734096
已用内存百分比=100*(最大可用)/最大=100*(192413696-39734096)/192413696=79.35%
通过jmx:java进行了另一个计算。lang:type=memory (使用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运行时api之间存在差异的原因是什么?
如果我想知道jvm堆中占用的内存是哪种方法(第2点或第3点)。我的目的是在jvm内存不足之前发出警报。
我还有另一个观察。当我使用cms算法时(将-xms和-xms设置为32gb,占用率设置为70%),我可以看到使用mbean和java runtime freemory()计算的可用内存之间的差异。当我使用g1时,我找不到这些差异(mbean和运行时api给出了相同的值)。
2条答案
按热度按时间dvtswwa31#
计算应使用内存/maxmemory*100
flvlnr442#