java—计算jvm的已用内存

scyqe7ek  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(467)

我想计算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给出了相同的值)。

dvtswwa3

dvtswwa31#

计算应使用内存/maxmemory*100

Used Memory = 127737896
Max Memory = 201850880

127737896 / 201850880 * 100 = 63.28%
flvlnr44

flvlnr442#

Runtime rt = Runtime.getRuntime();
long mem = rt.totalMemory();
long fm = rt.freeMemory();
long mm = rt.maxMemory();
long used = mm - fm;

相关问题