Apache MINA不会删除未使用的数据

时间:2012-12-05 10:06:14

标签: java memory garbage-collection mina

我的MINA客户端有点问题。

我只创建一个到服务器的连接,然后服务器定期每秒发送一些数据。

简而言之,客户端连接到服务器;服务器将字符串发送回客户端,所有这些步骤使用相同的打开连接(相同的客户端对象和客户端处理程序)。

但问题是,我认为,旧的数据不是由GC收集的。使用的堆在几秒钟内变得越来越大,永远不会减少。我的messageReceived方法是空的!

public void messageReceived(IoSession session, Object message) { }

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

VisualVM本身会造成大量垃圾。您可以启动一个空应用程序并休眠线程,启用VisualVM并观察垃圾开始收集。没有代码。

然而,我看到一个类似的问题,其中mina没有保留,但生成从不垃圾收集的长期运行项目(除非你运行Full GC)。此问题可能会导致实际内存为4mb的应用程序在一小时内显示为80mb。它永远不会被收集。

我即将构建自己的框架来包装NIO,因为我无法长时间保持服务器在线,而不会像这样重新启动。

答案 1 :(得分:0)

如果它永远不会减少,请启用-XX:+HeapDumpOnOutOfMemoryError,您将在内存不足错误时获得堆转储。

使用的内存量并不重要,只有完整GC后才能保留多少内存。我建议你定期运行VisualVM和tirgger一个完整的GC,看看之后有多少空闲。