我在我的程序上运行了一个堆转储.当我在内存分析器工具中打开它时,我发现java.lang.ref.Finalizerfor org.logicalcobwebs.proxool.ProxyStatement占用了大量内存.为什么会这样?

一如既往,一个冗长的问题描述.
我们目前正在对我们的产品进行压力测试 - 现在我们面临一个奇怪的问题.一到两个小时后,堆空间开始增长,应用程序稍后会死.
对应用程序进行概要分析会显示大量的Finalizer对象,从而填充堆.好吧,我们认为"可能是一个奇怪的终结器线程减慢"问题,并审查了减少需要最终确定的对象的数量(在这种情况下为JNA本机句柄).反正好主意,减少了成千上万的新物......
接下来的测试显示了相同的模式,仅一个小时后,并没有那么陡峭.这次Finalizers起源于在测试平台中大量使用的FileInput-和FileOutput流.所有资源都已关闭,但终结器不再清理.
我不知道为什么在1或2小时后(没有例外),FinalizerThread似乎突然停止工作.如果我们在一些线程中手动强制执行System.runFinalization(),则分析器会显示清除终结器.立即恢复测试会导致终结器的新堆分配.
FinalizerThread仍在那里,询问jConsole他正在等待.
编辑
首先,使用HeapAnalyzer检查堆没有发现任何新的/奇怪的.HeapAnalyzer有一些不错的功能,但我起初遇到了困难.我使用jProfiler,它附带了很好的堆检测工具,并将继续使用它.
也许我错过了HeapAnalyzer中的一些杀手级功能?
其次,今天我们使用调试连接而不是分析器来设置测试 - 系统现在稳定了近5个小时.这似乎是一个非常奇怪的组合,包括太多的终结器(在第一次审查中已经减少),分析器和VM GC策略.由于目前一切运行良好,没有真正的见解......
感谢您到目前为止的输入 - 也许您保持关注和感兴趣(现在您可能有更多理由相信我们不会谈论简单的编程错误).
很多人注意到活动中的EditText即使一旦完成就会持有对活动的强引用.要清楚这个EditText在布局中并且已经膨胀,没有设置监听器.这仅发生在某些设备上,例如Samsung Galaxy S4(Android 4.2.2)和其他设备.很多帖子都说没有解决方案.首先是一些有用的帖子.(最终GC会清除它,所以它在技术上不是泄漏,但对于重型内存应用程序,它需要很长时间并将导致OOM)
为什么EditText在Ice Cream Sandwich中保留其Activity的Context
所提到的解决方案并不适用于所有设备.它归结为Edittext Watcher.我认为可能有一个解决方案来覆盖这个Watcher然后有一个函数来清理onDestroy().请帮忙,我已经好几天了.
这是MAT直方图

android memory-leaks android-edittext android-textattributes