我爲某些命題邏輯表達式寫了一個javaCC分析器。 表達式可以變得很長,30k個字符。Java:有限遞歸中的Stackoverflow
當我解析這樣的大表達式時,我得到一個堆棧溢出異常。
是否有一些VM參數決定堆棧大小?
或者你會在這種情況下做什麼?
感謝
我爲某些命題邏輯表達式寫了一個javaCC分析器。 表達式可以變得很長,30k個字符。Java:有限遞歸中的Stackoverflow
當我解析這樣的大表達式時,我得到一個堆棧溢出異常。
是否有一些VM參數決定堆棧大小?
或者你會在這種情況下做什麼?
感謝
是,使用-Xss
參數。例如:
java -Xss4m Blah
將堆棧大小設置爲4MB。
雖然你可以根據Oli的回答改變堆棧大小,但我建議你嘗試尋找一種不太複雜的替代方法。例如,您可能希望構建一個堆棧或「迄今爲止的結果」或任何其他隊列,以模仿遞歸,但使用堆空間而不是堆棧空間。增加虛擬機堆棧大小總是讓我覺得這是一個「解決方案」,它只是延遲了一點問題。 (這也意味着,如果你最終得到堆棧跟蹤,它們將是可怕的......但是如果你對這堆「你正在看的東西」使用適當的診斷,你最終可能會得到數據驅動診斷,而不是基於堆棧幀的診斷。)