0

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

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

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

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

谢谢

4

2 回答 2

4

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

java -Xss4m Blah

将堆栈大小设置为 4MB。

于 2011-08-27T11:47:02.860 回答
1

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

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

于 2011-08-27T11:56:01.130 回答