我使用以下線程API來設置堆棧大小,比如我分配1或64或一些小的值,以便我可以模擬一個堆棧溢出異常,但值集不似乎有所作爲。設置堆棧大小,以線程似乎沒有什麼區別android
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
我使用以下線程API來設置堆棧大小,比如我分配1或64或一些小的值,以便我可以模擬一個堆棧溢出異常,但值集不似乎有所作爲。設置堆棧大小,以線程似乎沒有什麼區別android
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
javadoc文檔說,你不能指望任何特定的行爲,所以你必須試驗。
我還沒有過與小數字測試,但創造了Android的線程與
new Thread(getMainLooper().getThread().getThreadGroup(), myRunnableThatNeedsLotOfStack, "My Thread", 65536)
引起的可運行在主線程中運行要經過精美時會得到的StackOverflowError,所以我想您可以在Android中將線程的堆棧大小設置爲64K。
主線程的堆棧大小非常小,無法更改。大小因Android的版本而異;見What is the android UI thread stack size limit and how to overcome it?。卡爾在他的回答中說,你創建的新線程可以被賦予更多的堆棧。
Android是開源的,所以像這樣的問題可以很容易地回答,而不需要其他人提出的猜測。簡而言之,堆棧大小被截斷爲介於最小值(1536字節)和最大值(257K字節)之間,因此使用這些範圍以外的值將不會產生任何影響。另外,主線程大小固定的建議並不完全正確;它由VM的-Xss命令行選項控制,我相信可以使用adb shell setprop dalvik.vm.extra-opts
進行設置。
平臺通常有一個最小堆棧大小,如1頁的虛擬內存(通常4096字節) – nos