Какой параметр запуска JVM используется для контроля размера стека потока?
Для контроля размера стека потока используется параметр -Xss.
Синтаксис
Пример
java -Xss<размер> MyApp
Примеры:
Пример
java -Xss512k MyApp # 512 килобайт
java -Xss1m MyApp # 1 мегабайт
java -Xss2m MyApp # 2 мегабайта
Значения по умолчанию
| Платформа | Размер стека по умолчанию |
|---|---|
| Linux x64 | 1 МБ |
| macOS x64 | 1 МБ |
| Windows x64 | 1 МБ (может варьироваться) |
| 32-bit JVM | 512 КБ |
Что хранится в стеке потока
- Фреймы вызовов методов (call stack frames)
- Локальные переменные (примитивы и ссылки)
- Промежуточные результаты вычислений
- Информация для обработки исключений
Когда увеличивать -Xss
StackOverflowErrorпри глубокой рекурсии – увеличьте-Xss.- Приложение использует много потоков с глубокими стеками вызовов.
Когда уменьшать -Xss
- Приложение создаёт много потоков (тысячи) и памяти не хватает: каждый поток выделяет стек, и при 1000 потоках × 1 МБ = 1 ГБ только на стеки.
- Уменьшение
-Xssдо 256-512 КБ может существенно снизить потребление памяти.
Программная установка
Размер стека можно задать при создании потока:
Пример
// Размер стека только для этого потока
Thread thread = new Thread(null, runnable, "my-thread", 512 * 1024); // 512 КБ
thread.start();
Virtual Threads (Java 21+)
Для виртуальных потоков параметр -Xss не применяется. Виртуальные потоки используют динамический стек, который начинается с нескольких КБ и растёт по мере необходимости. Это позволяет создавать миллионы виртуальных потоков без проблем с памятью.
Аналогия из жизни.
-Xss– это высота шкафа для документов: чем выше шкаф (больше стек), тем больше папок (вызовов методов) можно положить. Но если шкафов много (много потоков), большие шкафы могут не поместиться в комнату (память).
На собеседовании. Запомните:
-Xss(или-XX:ThreadStackSize). Типичное значение по умолчанию – 1 МБ. Увеличивают приStackOverflowError, уменьшают при большом количестве потоков для экономии памяти. Также можно задать размер стека программно через конструкторThread. Для виртуальных потоков это неактуально.