2011-08-27 75 views
0

我为某些命题逻辑表达式写了一个javaCC分析器。 表达式可以变得很长,30k个字符。Java:有限递归中的Stackoverflow

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

是否有一些VM参数决定堆栈大小?

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

感谢

回答

4

是,使用-Xss参数。例如:

java -Xss4m Blah 

将堆栈大小设置为4MB。

1

虽然你可以根据Oli的回答改变堆栈大小,但我建议你尝试寻找一种不太复杂的替代方法。例如,您可能希望构建一个堆栈或“迄今为止的结果”或任何其他队列,以模仿递归,但使用堆空间而不是堆栈空间。增加虚拟机堆栈大小总是让我觉得这是一个“解决方案”,它只是延迟了一点问题。 (这也意味着,如果你最终得到堆栈跟踪,它们将是可怕的......但是如果你对这堆“你正在看的东西”使用适当的诊断,你最终可能会得到数据驱动诊断,而不是基于堆栈帧的诊断。)