Java .lang. outofmemoryerror: Java堆空间使用数组列表


Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.Arrays.copyOf(Unknown Source)
    at java.util.ArrayList.grow(Unknown Source)
    at java.util.ArrayList.ensureExplicitCapacity(Unknown Source)
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
    at FibonacciHeap.removemax(FibonacciHeap.java:148)
    at UseFibonacciHeap.main(UseFibonacciHeap.java:61)

我在Eclipse上的java程序是从文件中读取字符串,并将它们插入到数组列表中,并提前进行大量计算。遇到超过150个字符串时抛出上述异常。我尝试增加虚拟机空间,使用睡眠,但没有工作!最终目标是操作100万个字符串(并非全部唯一)。

编辑:

数组列表toVisit的用法:

for (FibonacciNode curr = max_ptr; toVisit.isEmpty() || toVisit.get(0) != curr; curr = curr.right_sibling)
{
     toVisit.add(curr);
     ...
}

VM类的参数:-Xms1024M -Xmx1524M

谁能告诉我做这件事的最佳方法?有没有别的数据结构可以使用?谢谢! !

我认为问题出在你的算法上,而不是你的内存设置上。

首先,你应该检查在堆栈跟踪中打印的那几行代码做了什么:FibonacciHeap.removemax (FibonacciHeap.java: 148)UseFibonacciHeap.main (UseFibonacciHeap.java: 61)

您可以使用-Xmx6g来增加堆空间,但是150个字符串对于堆来说似乎是一个非常小的数目。请确保您使用的是StringBuffer或StringBuilder而不是String.

最新更新