CommModel中可能的内存泄漏

时间:2019-05-29 14:33:46

标签: rinsim

我们正在尝试在RinSim中实现代理MAS。我们使用CommModelCommUserCommDevice将信息素从信息素发送到蚂蚁(模拟“闻”信息素)。我们将信息素注册(如果丢弃了信息素,则从CommUser到模拟中;如果信息素蒸发了,则取消注册它。尽管看起来这些信息素并未从CommModel的通讯设备列表中删除( RinSim的一部分)。我们使用了一个工具来分析代码,结果如下:

  

“ com.github.rinde.rinsim.core.model.comm.CommModel”的一个实例   由“ sun.misc.Launcher $ AppClassLoader @ 0x8169f378”加载   691,677,816(99.43%)字节。内存在一个实例中累积   的“ com.github.rinde.rinsim.util.LinkedHashBiMap”的加载   “ sun.misc.Launcher $ AppClassLoader @ 0x8169f378”。

随着时间的推移,它一直在增长(尽管我们在模拟中未注销信息素)。

我们认为LinkedHashBiMap是指BiMap中的usersDevices或unregisteredUsersDevices CommModel

我们应该采取其他措施来注销通信设备吗?还是这可能是框架中的内存泄漏?

修改

进一步研究之后,确实发现CommModel类中存在问题:注销该comm用户后,该用户及其设备保存在未注册设备列表中,因此如果它们将来会再次注册,它们会分配到同一设备。尽管此列表从未清除过,所以所有被破坏的蚂蚁都保留在内存中。现在,我们使用反射来清除列表,尽管这不是一个好的解决方案。

0 个答案:

没有答案