如何增加Java 堆棧大小(Xss 參數)
要增加JVM 中運行時堆棧的容量,請使用'-Xss ' 具有適當值的命令列標誌。對於'TT' 程式(1
'-X...' 標誌的實現依賴
請注意,「-X...」標誌是特定於實現的。在提供的 Java 版本中,「-Xss」標誌控制所有執行緒的堆疊大小。
線程特定的堆疊分配
或者,您可以分配一個慷慨的堆疊大小。使用 java.lang.Thread.stackSize() 方法指定特定執行緒的堆疊大小。這種方法是有利的,因為它可以防止具有適度堆疊要求的執行緒的記憶體浪費。
確定堆疊要求
要衡量程式所需的堆疊大小,請迭代運行它隨著堆疊大小的增加,直到它成功執行且沒有“StackOverflowError” 。對於「TT」程序,堆疊大小確定如下:
非確定性堆疊要求現象
由於以下因素,堆疊要求可能會表現出不確定性行為垃圾收集和JIT 執行計時。要精確計算達到的堆疊深度,請參考下面的答案(使用 Javassist)。
替代實作
考慮堆疊消耗較少的替代演算法。對於「fact」函數,可以利用迭代實作來避免遞歸並減少堆疊使用:
BigInteger 注意事項
「fact」函數不能因為溢出,使用“long”資料型別計算大於65 的數字的精確階乘。重構函數以傳回“BigInteger”可以解決此問題,並為較大的輸入提供準確的結果。
以上是如何增加 Java 堆疊大小並避免 StackOverflowError?的詳細內容。更多資訊請關注PHP中文網其他相關文章!