2016-11-12 62 views
0
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程序读取从文件中的字符串,并将其插入到一个数组列表,并做了很多的计算ahead.It的抛出上述异常遇到150多串。我试图增加虚拟机空间,使用睡眠,但没有任何作品! 最终目标是在100万个字符串上运行(并非全部都是唯一的)。java.lang.OutOfMemoryError:使用的ArrayList

编辑:ArrayList中toVisit的

用法:

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

VM参数为类: -Xms1024m -Xmx1524M

可有人指导我这样做的最佳方式。我可以使用不同的数据结构吗?谢谢 !!

+1

加你的代码问题。 Arraylist不应该耗尽内存这么快,所以它很可能是错误在于如何使用您的数组列表 – baseballlover723

+0

显示您的ecplise vm参数 –

+1

您可以给代码更多的上下文吗?什么是所有变数?他们来自哪里?我猜想你有一个无限循环的地方。 – baseballlover723

回答

0

你可以用-Xmx6g增加堆空间,但是150个字符串看起来像是一个非常小的数字,可以堆积起来。确保你使用的是StringBuffer或StringBuilder而不是String。

1

我认为问题位于您的算法中,而不是您的记忆设置。

首先,你应该检查什么的代码确实在其上印的堆栈跟踪行:在UseFibonacciHeap.main(UseFibonacciHeap.java:61) 在FibonacciHeap.removemax(FibonacciHeap.java:148)