我使用以下线程api来设置堆栈大小,比如我分配1或64或一些小值,以便我可以模拟stackoverflow异常,但值集似乎没有任何区别。
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
答案 0 :(得分:3)
javadoc文档说你不能指望任何特定的行为,所以你必须进行实验。
我从未测试过小数字,但在Android中用
创建一个帖子new Thread(getMainLooper().getThread().getThreadGroup(), myRunnableThatNeedsLotOfStack, "My Thread", 65536)
导致runnable在主线程中运行时会得到StackOverflowError以完美地通过,所以我猜你可以在Android中将线程的堆栈大小设置为64K。
答案 1 :(得分:1)
主线程的堆栈大小非常小,无法更改。尺寸因Android版本而异;见What is the android UI thread stack size limit and how to overcome it?。正如卡尔在回答中所说,你创建的新线程可以获得更多堆栈。
答案 2 :(得分:0)
这在Thread的JavaDoc中有详细记载。引用:
stackSize参数的值与最大递归深度和并发级别之间的关系的详细信息取决于平台。 在某些平台上,stackSize参数的值可能无效。
答案 3 :(得分:0)
Android是开源的,因此可以很容易地回答这样的问题而不需要其他人提出的猜测。简单地说,堆栈大小被截断为介于最小值(1536字节)和最大值(257千字节)之间,因此使用这些范围之外的值将没有区别。另外,主线程大小固定的建议并不完全正确;它由VM的-Xss命令行选项控制,我相信可以使用adb shell setprop dalvik.vm.extra-opts
设置。