stackoverflow怎么解決
- 棧溢出的可能原因:
- 函數遞歸調用層次過深 ,每調用一次,函數的參數、局部變量等信息就壓一次棧,並且沒有及時出棧。
- 局部變量體積太大
-
分析:每一個 JVM 線程都擁有一個私有的 JVM 線程棧,用於存放當前線程的 JVM 棧幀(包括被調用函數的參數、局部變量和返回地址等)。
-
如果某個線程的線程棧空間被耗盡,沒有足夠資源分配給新創建的棧幀,就會拋出 java.lang.StackOverflowError 錯誤。
-
解決方案:
1.把遞歸調用函數改用while或者for循環來實現 。
2.通過尾遞歸優化。
3.改用堆內存,函數里定義很大的局部變量(例如大數組),這種情況可以將局部變量改為靜態變量(實質上也是全局變量)。
4.增大棧的大小值。