如何修复MQTT应用程序的内存泄漏?

时间:2017-02-10 11:22:39

标签: java memory-leaks mqtt paho jvisualvm

我有一个使用paho mqtt库的应用程序。 我注意到VisualVM中的应用程序中似乎存在内存泄漏。

以下是一些屏幕截图:enter image description here

首先,我不明白为什么有这样的高峰,如果有人能解释我,我会很感激。 然后你可以看到,一开始应用程序以大约5Mb的内存开始并以超过10Mb的速度完成,我得知某处有内存泄漏,我是对的吗?

这是我执行garbace收藏家后的截图: enter image description here

你可以看到它返回到大约5Mb的内存,但仍然会一次又一次地增长。

我不知道这是否有用但是我截取了一个截图来了解这个内存增长来自哪个线程:

enter image description here

我希望有人能够帮助我。非常感谢!

2 个答案:

答案 0 :(得分:1)

这是Heisenbug。换句话说,you are observing that you are observing(很好地说,我必须链接它)。 JMX正在吃内存以通过RMI向您发送内存统计信息。如果您想知道自己的应用实际吃多少,请定期查询Runtime.max/total/freeMemory并将其记录到文件或其他内容。

答案 1 :(得分:1)

该图形看起来像generational garage收集器的输出,并且不显示内存泄漏。锯齿是年轻一代的工作,基线的增加是长期数据被复制到老一代。

触发收集后图形重置为5mb的事实是旧一代被清理并释放从年轻一代复制的现在未引用的数据。