我有一个使用paho mqtt库的应用程序。 我注意到VisualVM中的应用程序中似乎存在内存泄漏。
首先,我不明白为什么有这样的高峰,如果有人能解释我,我会很感激。 然后你可以看到,一开始应用程序以大约5Mb的内存开始并以超过10Mb的速度完成,我得知某处有内存泄漏,我是对的吗?
你可以看到它返回到大约5Mb的内存,但仍然会一次又一次地增长。
我不知道这是否有用但是我截取了一个截图来了解这个内存增长来自哪个线程:
我希望有人能够帮助我。非常感谢!
答案 0 :(得分:1)
这是Heisenbug。换句话说,you are observing that you are observing(很好地说,我必须链接它)。 JMX正在吃内存以通过RMI向您发送内存统计信息。如果您想知道自己的应用实际吃多少,请定期查询Runtime.max/total/freeMemory
并将其记录到文件或其他内容。
答案 1 :(得分:1)
该图形看起来像generational garage收集器的输出,并且不显示内存泄漏。锯齿是年轻一代的工作,基线的增加是长期数据被复制到老一代。
触发收集后图形重置为5mb的事实是旧一代被清理并释放从年轻一代复制的现在未引用的数据。