2011-02-18 121 views
2

在eclipse中获取以下错误。如何解决java.lang.OutOfMemoryError

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space. 

有人可以知道如何解决这个问题?

问候,
马亨德拉Athneria

+0

您是否尝试增加堆空间?也许你确实需要那么多的内存(默认值非常低) – 2011-02-18 14:14:45

回答

0

,而不是强制System.gc()作为@keatch的建议,我认为这是更好地了解什么是内存泄漏。有一个工具jHatJava Heap Analysis Tool),它可以帮助找出问题的原因。

Here是一个解释如何做堆转储。

4

使用较少的内存。

如果不知道你正在运行什么样的应用程序,很难确切地说出问题所在。所以这个答案只是包含处理这个问题的一般建议。

使用JDK附带的jvisualvm应用程序。它将允许您连接到正在运行的进程并查看内存使用方式的细目。

请在结果中查找大量不应存在的对象。如果你看到有一个课程有20,000个实例,那么做数学,看看是否应该有那么多。寻找比实际存在的方式更多的实例的对象类型。那么你必须弄清楚为什么你有这么多。

这些额外的对象可能正在创建,并没有正确解除引用。你可能会把它们放在某个地方的数据结构中,而不是删除它们。您可能有仍然在运行的线程,这些线程引用的数据不会像他们应该那样结束。你可能会继续引用应该被垃圾收集的数据的原因有各种各样的原因。

关键信息是知道哪个对象类正在像这样爆炸。一旦你知道了,你可以重写该类的构造函数和析构函数来记录它们中有多少被创建和销毁,以及在哪里。通过灌注这些数据,您可以确定额外的对象在哪里,或者哪些地方没有被销毁。一旦你纠正了这个问题,你就会停止发现错误。

当然,您处理的数据实际上完全有可能需要这些内存。您没有告诉我们您的项目,因此无法准确判断。如果是这种情况,那么您需要弄清楚如何对数据进行分区,以便一次只加载一部分数据,对其进行处理,将其从内存中释放出来,然后转移到下一块数据上。

我以前有过这些问题,并使用上述所有技术来解决它们。

1

eclipse是否正在运行内存或您在eclipse中运行的应用程序?

假设它没有内存泄漏,而您只需要更多内存,则可以更改传递给在eclipse中运行的应用程序的VM参数。运行配置 - >虚拟机参数 - > -Xmx512m

如果问题是eclipse,那么您可以编辑设置文件eclipse.ini并更改-Xmx参数。

但是,如果您确实有内存泄漏,增加最大堆大小将会稍微隐藏问题。

相关问题