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