- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
一般情况下,我们在 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
测试结果如下。
| <br>stackSize<br> | <br>1<br> | <br>10<br> | <br>100<br> | <br>1 000<br> | <br>10 000<br> | <br>100 000<br> | <br>1 000 000<br> | <br>10 000 000<br> |
| <br>window10<br> | <br>9671<br> | <br>9660<br> | <br>9667<br> | <br>9668<br> | <br>205<br> | <br>836<br> | <br>9660<br> | <br>106888<br> |
| <br>Ubuntu 16.04<br> | <br>1284<br> | <br>1279<br> | <br>1285<br> | <br>1281<br> | <br>1287<br> | <br>1309<br> | <br>8661<br> | <br>95207<br> |
Windows 的测试结果不容乐观,Ubuntu 的测试结果还算合理。
从测试可以看到,随着 stackSize 数量级的不断增加,递归的深度也变得越来越大,该参数一般情况下不会主动设置,采用默认的值就可以了,默认情况下会设置为0.
一 点睛 一般情况下,我们在 Thread 的构造函数中不会去指定 stackSize,而是统一通过 xss 参数进行设置,当 stackSize 越大,代表着正在线程内方法调用递归的深度越深。 在某
我需要更改项目中的堆栈大小,但我尝试在 Visual Studio 中打开“属性页”选项,但没有出现更改堆栈大小的选项。您对我如何执行此操作有任何帮助吗? 非常感谢。 干杯 最佳答案 Visual S
我正在尝试使用 gfortran/libgomp 构建第三方 OpenMP 程序,但是我在使用扩展来检索和设置 stacksize-var ICV 时遇到了麻烦。源代码带有 Intel Fortran
当我构建代码时,它运行没有问题,但是我调试代码时,这会生成消息:函数使用堆栈的“1600000620”字节:超过/分析:堆栈大小 16384。 我将声明:int array[2000][2000] 放
我是一名优秀的程序员,十分优秀!