2012-04-17 48 views
0

我有一个接近1 mil的节点,我正在计算强连接组件。我增加了虚拟机的堆大小为10240 MB,但它仍然抛出这个异常:在大型图上计算SCC时的Java堆栈溢出

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

我绝对相信该代码是不是问题,但大小。我还可以做些什么?

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

如果我解决不了的StackOverflow.com的的StackOverflowError,我不知道还有什么地方转=)

+0

你需要包含更多的代码。如果您使用递归调用,则可能需要更改代码以使用常规循环。 – 2012-04-17 16:22:48

+0

那么,为什么不一开始就增加堆栈大小呢?去谷歌上查询。 – 2012-04-17 16:23:41

+0

堆栈大小不能对StackOverflowErrors产生影响,因为线程堆栈内存不是堆的一部分。您可以增加线程堆栈大小,但这是一个不同的JVM选项,-Xss我相信。 – 2012-04-17 16:25:58

回答

1

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

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

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