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