有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将堆栈大小设置为线程在安卓中似乎没有什么区别

我使用下面的线程api来设置堆栈大小,比如我分配1或64或一些较小的值,以便模拟stackoverflow异常,但该值集似乎没有任何区别

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

共 (4) 个答案

  1. # 1 楼答案

    javadoc文档说,你不能期望任何特定的行为,所以你必须进行实验

    我从来没有用小数字进行过测试,但是用Android创建了一个线程

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

    导致runnable在主线程中运行时会出现StackOverflowerError错误,因此我想您可以在Android中将线程的堆栈大小设置为64K

  2. # 3 楼答案

    这在JavaDoc for Thread中有很好的文档记录。引述:

    The details of the relationship between the value of the stackSize parameter and the maximum recursion depth and concurrency level are platform-dependent. On some platforms, the value of the stackSize parameter may have no effect whatsoever.

  3. # 4 楼答案

    Android是开源的,所以这样的问题可以很容易地回答,而不需要其他人的猜测。简单地说,堆栈大小被截断为介于最小值(1536字节)和最大值(257KB)之间,因此使用这些范围之外的值不会有任何区别。此外,关于主螺纹尺寸固定的建议也不完全正确;它由VM的-Xss命令行选项控制,我相信可以使用adb shell setprop dalvik.vm.extra-opts设置该选项