在大图上计算SCC的Java堆栈溢出

时间:2012-04-17 16:16:55

标签: java graph stack stack-overflow

我有一个接近1 mil节点的图表,我正在计算强连接组件。我已经将vm的堆大小增加到10240 mb,但它仍然抛出了这个异常:

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

我绝对相信代码不是问题,而是大小。我还能做什么?

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

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

2 个答案:

答案 0 :(得分:1)

请记住,StackOverflowErrorjava.util.Stack无关:当没有更多的空间用于调用堆栈(即太深的递归)时,抛出错误,而不是在没有空间的情况下在Stack对象中。

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

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

答案 1 :(得分:0)

请勿将StackOverflowErrorOutOfMemoryError混淆。 StackOverflowError出现“when an application recurses too deeply”,而no more memory could be made available by the garbage collector时出现OutOfMemoryError

因为你得到StackOverflowError,所以尝试找到一个可以将一些递归转换为循环的位置。这应该会有所帮助。