Java:有限递归中的Stackoverflow

时间:2011-08-27 11:44:24

标签: java recursion stack-overflow javacc

我为一些命题逻辑表达式编写了一个javaCC解析器。 表达式可以很长,30k多个字符。

当我解析这么大的表达式时,我得到了一个堆栈溢出异常。

是否有一些VM参数可以确定堆栈大小?

或者在这种情况下你会做什么?

由于

2 个答案:

答案 0 :(得分:4)

是的,使用-Xss参数。 e.g:

java -Xss4m Blah

将堆栈大小设置为4MB。

答案 1 :(得分:1)

虽然你可以根据Oli的回答改变堆栈大小,但我建议你尝试寻找一种不会如此深入的替代方法。例如,您可能希望构建“结果到目前为止”或其他任何内容的堆栈或队列,以模拟递归,但使用堆空间而不是使用堆栈空间。增加VM堆栈大小总是让我觉得它是一个“解决方案”,只是稍微延迟了这个问题。

(这也意味着如果你最终得到堆栈跟踪,它们将是怪异的......而如果你对“你正在看的东西”的堆栈使用适当的诊断,你最终会得到数据驱动的诊断,而不是基于堆栈帧的诊断。)