JDK线程构造函数StackSize是什么意思?

问题描述 投票:0回答:1

我设置了Thread stackSize=1,然后调用了三个方法,在我看来,方法栈是3个或更多,但为什么不会发生Stackoverflow Exception呢?在我看来,方法栈是3个或更多,但为什么不会发生Stackoverflow Exception呢? 这是我的代码。

public class ExecutorsTest {
private static void printOne() {
    System.out.println("do Print One");
    printTwo();
}
private static void printTwo() {
    System.out.println("do Print Two");
    printThree();
}
private static void printThree() {
    System.out.println("do Print Three");
}
public static void main(String[] args) throws Exception {
    ThreadGroup group = new ThreadGroup("thread-Group");
    Thread thread = new Thread(group, ()-> {
        printOne();
    },"myThread",1);
    thread.start();
}

}

enter image description here

multithreading java-threads
1个回答
0
投票

每个Java虚拟机线程都有一个私有的Java虚拟机栈,与线程同时创建。

Java虚拟机堆栈存储框架。栈中存放着局部变量和部分结果,并在方法的调用和返回中起着一定的作用。

栈中的 堆栈大小 是近似的 地址空间的字节数 虚拟机要为这个线程的栈分配。

的效果。stackSize 参数(如果有的话)高度依赖于平台。

在某些平台上,为该参数指定一个较高的值,就会使 stackSize 参数可以让线程在抛出一个新的参数之前实现更大的递归深度。StackOverflowError.

同样,指定一个较低的值可能会允许更多的线程并发存在,而不会抛出一个 OutOfMemoryError 或其他内部错误)。

的值之间的详细关系。stackSize 参数以及最大递归深度和并发级别都是依赖于平台的。

在某些平台上,最大递归深度和并发级别的 stackSize 参数可能没有任何效果。

© www.soinside.com 2019 - 2024. All rights reserved.