2011-09-17 42 views
0

我使用以下線程API來設置堆棧大小,比如我分配1或64或一些小的值,以便我可以模擬一個堆棧溢出異常,但值集不似乎有所作爲。設置堆棧大小,以線程似乎沒有什麼區別android

Thread(ThreadGroup group, Runnable target, String name, long stackSize) 
+0

平臺通常有一個最小堆棧大小,如1頁的虛擬內存(通常4096字節) – nos

回答

0

這在JavaDoc中對於Thread有很好的記錄。引用:

stackSize參數的值與最大遞歸深度和併發級別之間的關係的細節是依賴於平臺的。 在某些平臺上,stackSize參數的值可能不起任何作用。

+0

是的,我讀過這個,想知道它是如何工作在Android? – Kavitha

+0

Android是一個操作系統,而平臺通常是底層硬件和操作系統的組合,所以它不太可能在Android設備上保持一致。即使事情現在就是這樣,但未來也不能保證。您可能不應該依賴應用程序的堆棧大小參數的行爲。 – dlawrence

3

javadoc文檔說,你不能指望任何特定的行爲,所以你必須試驗。

我還沒有過與小數字測試,但創造了Android的線程與

new Thread(getMainLooper().getThread().getThreadGroup(), 
    myRunnableThatNeedsLotOfStack, "My Thread", 65536)

引起的可運行在主線程中運行要經過精美時會得到的StackOverflowError,所以我想您可以在Android中將線程的堆棧大小設置爲64K。

0

Android是開源的,所以像這樣的問題可以很容易地回答,而不需要其他人提出的猜測。簡而言之,堆棧大小被截斷爲介於最小值(1536字節)和最大值(257K字節)之間,因此使用這些範圍以外的值將不會產生任何影響。另外,主線程大小固定的建議並不完全正確;它由VM的-Xss命令行選項控制,我相信可以使用adb shell setprop dalvik.vm.extra-opts進行設置。

相關問題