Рубрики
Без рубрики

Настройка размеров стеков в СПМ

Узнайте, как настроить размеры стеков потоков в JVM HotSpot

Автор оригинала: Ali Dehghani.

1. Обзор

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

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

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

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

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

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

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

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

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

java -Xss1048576 // omitted

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

-Xss1m 
-Xss1024k

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

java -XX:ThreadStackSize=1024 // omitted

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

$ 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. Заключение

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