我为一些命题逻辑表达式编写了一个 javaCC 解析器。表达式可以变得很长,有 30k 个字符。
当我解析这么大的表达式时,我得到一个堆栈溢出异常。
是否有一些 VM 参数决定了堆栈大小?
或者在这种情况下你会怎么做?
谢谢
我为一些命题逻辑表达式编写了一个 javaCC 解析器。表达式可以变得很长,有 30k 个字符。
当我解析这么大的表达式时,我得到一个堆栈溢出异常。
是否有一些 VM 参数决定了堆栈大小?
或者在这种情况下你会怎么做?
谢谢
是的,使用-Xss
参数。例如:
java -Xss4m Blah
将堆栈大小设置为 4MB。
虽然您可以根据 Oli 的回答更改堆栈大小,但我建议您尝试寻找一种不会如此深入地递归的替代方法。例如,您可能想要构建一个堆栈或队列“到目前为止的结果”或其他任何东西,以模拟递归但使用堆空间而不是使用堆栈空间。增加 VM 堆栈大小总是让我觉得这是一个“解决方案”,只是稍微延迟了问题。
(这也意味着如果你最终得到堆栈跟踪,它们将是可怕的......而如果你对“你正在查看的东西”的堆栈使用适当的诊断,你最终可能会得到数据驱动的诊断,而不是基于堆栈帧的。)