我设置了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();
}
}
每个Java虚拟机线程都有一个私有的Java虚拟机栈,与线程同时创建。
Java虚拟机堆栈存储框架。栈中存放着局部变量和部分结果,并在方法的调用和返回中起着一定的作用。
栈中的 堆栈大小 是近似的 地址空间的字节数 虚拟机要为这个线程的栈分配。
的效果。
stackSize
参数(如果有的话)高度依赖于平台。
在某些平台上,为该参数指定一个较高的值,就会使 stackSize
参数可以让线程在抛出一个新的参数之前实现更大的递归深度。StackOverflowError
.
同样,指定一个较低的值可能会允许更多的线程并发存在,而不会抛出一个 OutOfMemoryError
或其他内部错误)。
的值之间的详细关系。stackSize
参数以及最大递归深度和并发级别都是依赖于平台的。
在某些平台上,最大递归深度和并发级别的 stackSize
参数可能没有任何效果。