Перейти к основному содержимому

Настройка размеров стека в JVM

· 3 мин. чтения

1. Обзор

В этом кратком руководстве мы рассмотрим, как настроить размеры стека потоков в HotSpot JVM.

2. Размер стека по умолчанию

Каждый поток JVM имеет собственный собственный стек для хранения информации о стеке вызовов , локальных переменных и частичных результатов. Поэтому стек играет решающую роль в вызовах методов. Это часть спецификации JVM , и, следовательно, каждая реализация JVM использует стеки.

Однако другие детали реализации, такие как размер стека, зависят от реализации. С этого момента мы сосредоточимся на HotSpot JVM и будем использовать термины JVM и HotSpot JVM взаимозаменяемо.

В любом случае, JVM будет создавать стеки одновременно с созданием потока-владельца.

Если мы не укажем размер стеков, JVM создаст их с размером по умолчанию. Обычно этот размер по умолчанию зависит от операционной системы и архитектуры компьютера. Например, вот некоторые из размеров по умолчанию для Java 14:

По сути, мы можем ожидать около 1 МБ для каждого стека в большинстве современных операционных систем и архитектур.

3. Настройка размера стека

Чтобы изменить размер стека, мы можем использовать флаг настройки -Xss . Например, -Xss1048576 устанавливает размер стека равным 1 МБ:

java -Xss1048576 // omitted

Если мы не хотим вычислять размер в байтах, мы можем использовать несколько удобных сокращений для указания различных единиц измерения — буква k или K для обозначения КБ, m или M для обозначения МБ и g или G для обозначения ГБ. Например, давайте рассмотрим несколько различных способов установить размер стека равным 1 МБ:

-Xss1m 
-Xss1024k

Подобно -Xss , мы также можем использовать флаг настройки -XX:ThreadStackSize для настройки размера стека. Однако синтаксис для -XX:ThreadStackSize немного отличается. Мы должны разделить размер и имя флага знаком равенства:

java -XX:ThreadStackSize=1024 // omitted

HotSpot JVM не позволит нам использовать размер меньше минимального значения :

$ java -Xss1K -version
The Java thread stack size specified is too small. Specify at least 144k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Кроме того, это не позволит нам использовать размер больше максимального значения (обычно 1 ГБ):

$ java -Xss2g -version
Invalid thread stack size: -Xss2g
The specified size exceeds the maximum representable size.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

4. Вывод

В этом кратком руководстве мы увидели, как настроить размеры стека потоков в HotSpot JVM.