Java堆棧溢出錯誤 - 如何在Eclipse中增加堆棧大???我正在運行一個我在Eclipse中用Java編寫的程序。對于非常大的輸入,該程序具有非常深的遞歸級別。對于較小的輸入,程序運行正常但是當(dāng)給出大輸入時,我得到以下錯誤:Exception in thread "main" java.lang.StackOverflowError可以通過增加Java堆棧大小來解決這個問題,如果是這樣,我該如何在Eclipse中執(zhí)行此操作?更新:@Jon Skeet代碼以遞歸方式遍歷解析樹以構(gòu)建數(shù)據(jù)結(jié)構(gòu)。因此,例如,代碼將使用解析樹中的節(jié)點執(zhí)行一些工作,并在節(jié)點的兩個子節(jié)點上調(diào)用自身,將它們的結(jié)果組合在一起以給出樹的整體結(jié)果。遞歸的總深度取決于解析樹的大小,但當(dāng)遞歸調(diào)用的數(shù)量達到1000時,代碼似乎失?。]有更大的堆棧)。此外,我很確定代碼沒有失敗,因為它適用于小輸入的bug。
3 回答

阿晨1998
TA貢獻2037條經(jīng)驗 獲得超6個贊
打開應(yīng)用程序的運行配置(運行/運行配置...,然后在'Java應(yīng)用程序'中查找應(yīng)用程序條目)。
該參數(shù)選項卡中有一個文本框VM參數(shù),輸入-Xss1m
(或最大堆棧大小更大參數(shù))。默認值為512 kByte(SUN JDK 1.5 - 不知道供應(yīng)商和版本之間是否有所不同)。

互換的青春
TA貢獻1797條經(jīng)驗 獲得超6個贊
它可以通過增加堆棧大小來解決- 但更好的解決方案是找出如何避免遞歸這么多。遞歸解決方案總是可以轉(zhuǎn)換為迭代解決方案 - 這將使您的代碼更加干凈地擴展到更大的輸入。否則你真的會猜測要提供多少堆棧,這在輸入中可能甚至不明顯。
順便說一下,你是否完全確定輸入的大小而不是代碼中的錯誤?這次遞歸有多深?
編輯:好的,看到更新后,我會親自嘗試重寫它以避免使用遞歸。通常有一些Stack<T>
“仍然可以做的事情”是刪除遞歸的一個很好的起點。