我有一个接近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,我不知道还能在哪里转=)
答案 0 :(得分:1)
请记住,StackOverflowError
与java.util.Stack
无关:当没有更多的空间用于调用堆栈(即太深的递归)时,抛出错误,而不是在没有空间的情况下在Stack
对象中。
我建议的第一件事是修改算法。我的盲目猜测是你正在使用递归访问邻居节点,这会导致溢出。尝试使用循环代替递归。
出于短期目的,您还可以尝试使用-Xss
增加堆栈大小(不是堆大小)。顺便说一句,请记住每个线程都有自己的堆栈。
答案 1 :(得分:0)
请勿将StackOverflowError
与OutOfMemoryError
混淆。 StackOverflowError
出现“when an application recurses too deeply”,而no more memory could be made available by the garbage collector时出现OutOfMemoryError
。
因为你得到StackOverflowError
,所以尝试找到一个可以将一些递归转换为循环的位置。这应该会有所帮助。