Thread 的 stackSize

一 点睛

一般情况下,我们在 Thread 的构造函数中不会去指定 stackSize,而是统一通过 xss 参数进行设置,当 stackSize 越大,代表着正在线程内方法调用递归的深度越深。

在某些平台下,越高的 stackSize 设定,可以允许的递归深度越深,反之,越少的 stackSize 设定,则递归深度越浅。当然在某些平台下,该参数压根就不起任何作用,如果该参数设置为0,也不起任何作用。

二 测试代码

package concurrent;

public class ThreadStackSize {
    public static void main(String[] args) {
        if (args.length < 1) {
            System.out.println("请输入 stackSize");
            System.exit(1);
        }

        ThreadGroup group = new ThreadGroup("TestGroup");
        Runnable runnable = new Runnable() {
            final int Max = Integer.MAX_VALUE;

            @Override
            public void run() {
                int i = 0;
                recurse(i);
            }

            private void recurse(int i) {
                System.out.println(i);
                if (i < Max) {
                    recurse(i + 1);
                }
            }
        };
        Thread thread = new Thread(group, runnable, "Test", Integer.parseInt(args[0]));
        thread.start();
    }
}

三 测试结果

测试脚本

E:\JVMDemo\demo2022\target\classes>java -Xmx512m -Xms512m concurrent.ThreadStackSize 1

最后一个参数依次换成 10,100...10 000 000

测试结果如下。

stackSize

1

10

100

1 000

10 000

100 000

1 000 000

10 000 000

window10

9671

9660

9667

9668

205

836

9660

106888

Ubuntu 16.04

1284

1279

1285

1281

1287

1309

8661

95207

Windows 的测试结果不容乐观,Ubuntu 的测试结果还算合理。

从测试可以看到,随着 stackSize 数量级的不断增加,递归的深度也变得越来越大,该参数一般情况下不会主动设置,采用默认的值就可以了,默认情况下会设置为0.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值