Автор оригинала: Ali Dehghani.
1. Обзор
В этом быстром учебнике мы увидим, как настроить размеры стеков потоков в JVM HotSpot.
2. Размер стека по умолчанию
Каждый поток JVM имеет частный родной стек для хранения информации о стеке вызова, локальных переменных и частичных результатах. Таким образом, стек играет решающую роль в вызове метода. Это часть Спецификация JVM , и, следовательно, каждая реализация JVM там использует стеки.
Однако другие детали реализации, такие как размер стека, специфичны для реализации. Отныне мы сосредоточимся на HotSpot JVM и будем использовать термины JVM и HotSpot JVM взаимозаменяемо.
В любом случае, JVM будет создавать стеки в то же время он создает владеющий поток.
Если мы не указать размер для стеков, JVM создаст один с размером по умолчанию. Как правило, этот размер по умолчанию зависит от операционной системы и компьютерной архитектуры. Например, это некоторые из размеров по умолчанию по java 14:
- Linux/x86 (64-битный) : 1 МБ
- macOS (64-битный) : 1 МБ
- Oracle Solaris (64-битный) : 1 МБ
- На Windows, JVM использует размер стека в ширину системы
В принципе, мы можем ожидать около 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.