Опция JVM -Xss - Что он делает именно?


Ответы:


269

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


11
Таким образом, опция -Xss используется для ограничения объема памяти, используемого стеком (путем хранения адресов возврата, переменных и т. Д.), А также косвенно ограничивает, насколько глубоким может быть стек? Я прав?
— instantsetsuna

5
@instantsetsuna: я думаю, что более распространенное использование - это увеличение лимита по умолчанию. (Всегда есть предел.) Но да, вы контролируете размер стека, который контролирует, насколько глубоким может быть стек.
— TJ Crowder

Как вы делаете эквивалент этого параметра XSS на компиляторе Java (также известный как Javac)? Это проблема для тех, кто использует основанные на Scala библиотеки, которые приводят к большой рекурсии хвоста при компиляции классов - Эндрю Норман 9 секунд назад
— Эндрю Норман

@AndrewNorman: Вы не компилируете параметры времени выполнения Java в файл класса, это больше зависит от среды. Если вам действительно нужно сделать это в коде, вы можете написать крошечный основной класс, единственной задачей которого является запуск вашего реального приложения с нужными вам опциями.
— TJ Crowder

@AndrewNorman Вы можете задать флаги конфигурации JVM, с которыми должен работать компилятор с использованием -Jflagсинтаксиса (например, -J-Xss).
— francoisr

166

Это действительно устанавливает размер стека на JVM.

Вы должны прикоснуться к нему в любой из этих двух ситуаций:

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

Последнее обычно происходит, когда ваш Xss установлен слишком большим - тогда вам нужно сбалансировать его (тестирование!)


3
Не обязательно каждый раз на самом деле. И SOE, и OOME могут возникать по разным причинам, которые должны быть исправлены по-разному.
— Noego

4
Правда, но я не сказал, что -Xss является единственной причиной для SOE и OOME, но наоборот - если установлен неправильно, это может привести к одному из двух.
— Адам Адамашек

5

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


4

Если я не ошибаюсь, это то, что сообщает JVM, сколько последовательных вызовов он примет перед выпуском StackOverflowError. Не то, что вы хотите изменить вообще.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.