2011-08-27 70 views
0

我爲某些命題邏輯表達式寫了一個javaCC分析器。 表達式可以變得很長,30k個字符。Java:有限遞歸中的Stackoverflow

當我解析這樣的大表達式時,我得到一個堆棧溢出異常。

是否有一些VM參數決定堆棧大小?

或者你會在這種情況下做什麼?

感謝

回答

4

是,使用-Xss參數。例如:

java -Xss4m Blah 

將堆棧大小設置爲4MB。

1

雖然你可以根據Oli的回答改變堆棧大小,但我建議你嘗試尋找一種不太複雜的替代方法。例如,您可能希望構建一個堆棧或「迄今爲止的結果」或任何其他隊列,以模仿遞歸,但使用堆空間而不是堆棧空間。增加虛擬機堆棧大小總是讓我覺得這是一個「解決方案」,它只是延遲了一點問題。 (這也意味着,如果你最終得到堆棧跟蹤,它們將是可怕的......但是如果你對這堆「你正在看的東西」使用適當的診斷,你最終可能會得到數據驅動診斷,而不是基於堆棧幀的診斷。)