Java 没有OutOfMemory异常的内存泄漏?

Java 没有OutOfMemory异常的内存泄漏?,java,memory-leaks,Java,Memory Leaks,我的程序(在Glassfish上运行的JSF)有问题。它正在处理大量数据(并使用hibernate将其插入数据库)。问题是,大约工作2小时后,速度会变慢。我没有得到任何例外(尤其是没有OutOfMemory)。是否可能是内存泄漏?我已经用Eclipse内存分析器检查了堆转储,发现有一些HashMap问题。我已经在可能的地方修复了它,现在工具没有显示这个问题。但是我的应用程序仍然不能正常工作。听起来你的问题根本不是传统的内存泄漏 如果我猜的话,我会说您的数据结构设计糟糕,缓存效率低下,或者可能存在

我的程序(在Glassfish上运行的JSF)有问题。它正在处理大量数据(并使用hibernate将其插入数据库)。问题是,大约工作2小时后,速度会变慢。我没有得到任何例外(尤其是没有OutOfMemory)。是否可能是内存泄漏?我已经用Eclipse内存分析器检查了堆转储,发现有一些HashMap问题。我已经在可能的地方修复了它,现在工具没有显示这个问题。但是我的应用程序仍然不能正常工作。

听起来你的问题根本不是传统的内存泄漏

如果我猜的话,我会说您的数据结构设计糟糕,缓存效率低下,或者可能存在并发瓶颈


您可能应该专注于性能分析,以了解时间的走向,并寻找锁争用的迹象。

有可能出现某种内存泄漏,并生成大量临时对象,以便在适当的时间后,垃圾收集器会破坏您的性能。如果是这种情况,您可以使用
-Xmx
选项:堆大小越小,您的应用程序应该越早减速,越大的堆应该会显示出一种oppisite效果


这种影响也可能是由不断增长的内部数据结构造成的。数据结构上的操作总是有时间复杂度(“大O表示法”),如果复杂度是多项式或更糟,这样的操作也会降低性能。查看应用程序中随时间增长的集合,并仔细检查是否选择了最佳集合类型

您可以尝试使用visualvm连接到虚拟机,并查看虚拟机的状态,这可能会提供一些见解…相关/重复: