當前位置:編程學習大全網 - 網站源碼 - Java遞歸調用的問題,調用10000次的代碼會報錯

Java遞歸調用的問題,調用10000次的代碼會報錯

很簡單。函數調用,參數保存在當前線程的棧Stack中,而不是保存在堆Heap中。壹般來說Java虛擬機默認的Heap大小是128M,用來存放new的對象。但是對於每壹個線程,默認的棧大小只有512KB。所以,Java不能支持過多層次的遞歸調用。

要讓這段程序可以運行,可以加上參數

Java -Xss32m digui1

來設置線程的Stack的大小。

至於為什麽默認的棧的大小只有512KB, 那是因為在現代操作系統中,壹個進程的最大虛擬內存是2GB(以32位架構為例),壹個進程可以啟動多個線程。每啟動壹個線程,操作系統都要分配壹段內存做Stack,來保存這個線程函數調用的參數。也就是說,為了達到最大線程數和線程所用Stack的平衡,壹個進程會設置它啟動的線程的Stack的大小。在Java中,棧的大小是512KB,所以最大可以啟動 2GB/512KB ,大約是2000個線程。超過2000個, 將會報錯(OutOfMemory)類似的我記得C++的默認棧大小是1MB。也就是C++能啟動1000個左右的線程。

  • 上一篇:MES、WCS、WMS關聯和關系
  • 下一篇:javax.servlet.jsp.JspTagException這個異常具體是什麽異常,什麽地方錯了報這個異常謝謝 下面是代碼 急急
  • copyright 2024編程學習大全網