Java 导致记忆错误的主要原因是什么?

Java 导致记忆错误的主要原因是什么?,java,out-of-memory,Java,Out Of Memory,今天在工作中,我在一个应用程序中遇到了这个问题。 场景是:我们点击一个加载按钮,它将加载数据库中缺少的记录。但问题是,当点击刷新按钮重新加载相同的记录时,它给出了OutOfMemoryError。有谁能简单解释一下可能的原因是什么,因为在第一次尝试时,它加载了所有记录,但为什么刷新时会出现异常 如果有任何好的资源来研究这个场景,也会有很大帮助。 提前感谢…我知道我们的应用程序有很多线程处理。我试图通过使用下面的命令来减少服务器中的堆栈大小,结果成功了 -Xss512k(将java线程堆栈大小设置

今天在工作中,我在一个应用程序中遇到了这个问题。 场景是:我们点击一个加载按钮,它将加载数据库中缺少的记录。但问题是,当点击刷新按钮重新加载相同的记录时,它给出了OutOfMemoryError。有谁能简单解释一下可能的原因是什么,因为在第一次尝试时,它加载了所有记录,但为什么刷新时会出现异常

如果有任何好的资源来研究这个场景,也会有很大帮助。
提前感谢…

我知道我们的应用程序有很多线程处理。我试图通过使用下面的命令来减少服务器中的堆栈大小,结果成功了

-Xss512k
(将java线程堆栈大小设置为此)


以下是我用来解决此问题的方法。

唯一的原因是您不断创建新对象,但释放的空间不足,或者创建的线程太多

您可以使用来进行一些内存分析。这允许您获得概览,哪些对象在内存中,以及哪些其他对象/线程具有对它们的引用

Java VisualVM应该是Sun的JDK的一部分

另见:


您是否确保在重新加载旧结果时不再占用内存?这有助于此项目的开发,从上周开始我一直在进行此项目,但我对其没有太多深入的了解。你能建议我如何确保旧的结果不再占用内存吗?很抱歉,但出于安全和公司政策的考虑,我不能在这里发布代码?如果一般的阐述对我也有很大帮助。谢谢。第一次必须关闭SQL语句和结果集(使用JDBC),并且必须在按下按钮开始时清除任何现有列表。感谢Eggen的帮助,问题现在已经解决。这并不能回答原因问题。你能确认你创建了太多的线程,所以累积的堆栈大小实际上超过了一些限制吗?