我的程序有问题(在Glassfish上运行JSF)。它正在处理大量数据(并使用hibernate将其插入数据库)。问题是,经过大约2个小时的工作后,它会变慢。我没有任何异常(特别是没有OutOfMemory)。它是否可能是内存泄漏?我已经使用Eclipse Memory Analyzer检查了堆转储,并且存在一些HashMap问题。我已经在可能的地方进行了修复,现在该工具没有显示出这个问题。但我的申请仍然无法正常运作。
答案 0 :(得分:3)
听起来你的问题根本不是传统的内存泄漏。
如果我猜测,我会说你的数据结构设计不合理,缓存效率低下,或者是并发瓶颈。
您应该专注于性能分析,以查看时间的进展情况,并查找锁定争用的迹象。
答案 1 :(得分:0)
有一种可能性,你有某种内存泄漏和会产生很多临时对象,所以在经过一段时间后,垃圾收集器会杀死你的性能。如果是这种情况,您可以使用-Xmx
选项:使用较少的堆大小,您的应用程序应该提前减速,更大的堆应该显示反效果。
这种影响也可能是由于内部数据结构不断增长造成的。对数据结构的操作总是具有时间复杂度(“Big-O-Notation”),如果复杂性是多变的,甚至更糟,这样的操作也会破坏性能。查看应用程序中随时间增长并仔细检查的那些集合,您已选择最佳集合类型。