执行线程中“java.lang.OutofMemoryError”的可能原因是什么?

时间:2011-07-04 15:46:24

标签: java memory-leaks out-of-memory

我的申请中遇到了内存不足的问题。

在我的一个线程执行中,突然出现java.lang.OutofMemoryError并使线程死亡。

我已经选择了应用程序的内存堆大小为20M。 我已经在此线程发生此OOM之前和之后抛弃了整个应用程序的内存使用量,它不超过20M。

我不知道如何解决这个问题。

那么java.lang.OutofMemoryError的可能原因是什么?如果我不知道具体原因,有什么方法可以解决吗?

这就是我得到的! 在此应用程序的内存使用量为8M之前

此应用程序的内存使用量也是8M。

2 个答案:

答案 0 :(得分:1)

原因是你的内存不足。然而,这可能是几种类型中的一种,因此确切的信息很重要。

您可以使用jvisualvm(在JDK中)附加到正在运行的程序,并调查对象树以查看内存的去向。希望你可以推断为什么它仍然被使用(可以像持有结构副本的静态字段一样简单)以及如何摆脱它。

当你找到它时,然后放入try-finally子句,这样即使抛出一个OOM,内存总是被释放。

答案 1 :(得分:1)

可能是因为你没有给你的应用程序足够的内存。

  

我已经选择了应用程序的内存堆大小为20M。我已经在此线程发生此OOM之前和之后抛弃了整个应用程序的内存使用量,它不超过20M。

堆大小永远不会超过最大值。这是拥有最大手段的东西。 ;)

相关问题