【发布时间】:2011-01-09 15:00:27
【问题描述】:
我遇到了 Java 内存泄漏问题,由于某种原因,它没有出现在我的分析器 (Yourkit) 中。当我运行我的 Java 应用程序(具有一些用于侦听、发送和处理数据的线程的服务器)时,似乎每次我得到一个新连接并且这个连接被删除时,一些内存没有被清理。至少,Windows(和 Linux)是这样说的。
当我使用我的分析器运行我的应用程序时,它只是以应有的方式显示内存,当一个线程关闭时,所有内存都被清理了。然而,实际上,一段时间后 Java 只是因为它使用了太多内存而崩溃了,所以不管我的分析器说什么,我倾向于相信我确实使用它的 windows 和 Linux。运行垃圾回收也不会清理内存。
那么这可能是什么?我已经尝试了我所知道的一切,关闭线程,将所有对象设置为 null,删除每个数组的内容等。我很确定线程已关闭,因为 eclipse 和编译器以及打印输出似乎都证实了这一点。
有人知道吗?
【问题讨论】:
-
你怎么知道内存使用过多是问题所在?你收到
OutOfMemoryError了吗? -
另见:stackoverflow.com/questions/1473510/…(相关问题面板中的第一个点击...您确实检查了相关问题,对吗?)
-
根据 danben 的评论:您可能会收到“Out Of Memory”错误,这实际上意味着您超出了正在使用的线程数的限制。也许这就是正在发生的事情,这就是为什么您的分析器没有显示您的内存不足的原因。您提到“将对象设置为 null”表明您没有很好地处理基本概念,因此也许您确实有很多未终止的线程。