Что означает JDK Thread Constructor StackSize? - PullRequest
0 голосов
/ 25 мая 2020

Я устанавливаю Thread stackSize = 1, затем вызываю три метода. На мой взгляд, стек методов 3 и более. но почему не возникает исключение Stackoverflow? это мой код:

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

1 Ответ

0 голосов
/ 25 мая 2020

Каждый поток Java виртуальной машины имеет частный стек Java виртуальной машины, создаваемый одновременно с потоком.

A Java Стек виртуальной машины хранит фреймы. Стек содержит локальные переменные и частичные результаты и играет роль в вызове и возврате метода.

размер стека - это приблизительное количество байтов адресного пространства , которое виртуальная машина должна выделить для стека этого потока.

Влияние параметра stackSize, если таковое имеется, сильно зависит от платформы.

На некоторых платформах указание более высокого значения для параметра stackSize может позволить потоку достичь большей глубины рекурсии перед тем, как выбросить StackOverflowError.

Аналогичным образом, указание более низкого значения может позволить большему количеству потоков существовать одновременно без выдачи OutOfMemoryError (или другой внутренней ошибки).

Детали взаимосвязи между значением параметра stackSize и максимальной глубиной рекурсии и уровнем параллелизма зависят от платформы.

На некоторых платформах значение параметра stackSize может не иметь никакого эффекта.

...