Опция 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.