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