0

我有一个包含近 1 百万个节点的图,我在其上计算强连通分量。我已将 vm 的堆大小增加到 10240 mb,但它仍然抛出此异常:

Error: 875714
Exception in thread "main" java.lang.StackOverflowError
    at java.util.Stack.push(Stack.java:67)

我绝对确定代码不是问题,而是大小。我还可以做些什么?

更新:无论我设置 vm 的堆大小如何,都会在 6 秒后抛出 StackOverflowError。

如果我无法解决 StackOverflow.com 上的 StackOverflowError,我不知道还能去哪里 =)

4

2 回答 2

1

请记住,这StackOverflowError与以下无关java.util.Stack:当调用堆栈没有更多空间(即递归太深)时引发错误,而不是在Stack对象中没有空间时引发错误。

我建议的第一件事是修改算法。我的盲目猜测是您正在使用递归来访问邻居节点,这会导致溢出。尝试使用循环代替递归。

出于短期目的,您还可以尝试使用-Xss. 顺便说一句,请记住每个线程都有自己的堆栈。

于 2012-04-17T16:23:55.860 回答
0

不要将 aStackOverflowError与混淆OutOfMemoryError。AStackOverflowError发生在“应用程序递归太深时”,而 anOutOfMemoryError发生在“垃圾收集器无法提供更多可用内存”时。

由于您得到StackOverflowErrors,因此请尝试找到可以将某些递归转换为循环的位置。那应该有帮助。

于 2012-04-17T16:25:15.190 回答