Как определяется ограничение на количество вызовов функций в стеке в Java? - PullRequest
3 голосов
/ 10 августа 2011

Недавно я просматривал глубокий стек с 2000 рекурсивными вызовами функций, и мне было интересно, как определяется ограничение на количество вызовов функций в стеке в Java?

Ответы [ 2 ]

5 голосов
/ 10 августа 2011

Предел основан на максимальном объеме стековой памяти, выделенной каждому потоку.Вы можете настроить это ограничение, используя аргумент -Xss JVM.См. Эти ссылки для получения дополнительной информации:

FAQ по горячей точке

Использование Xss для настройки размера стека потока Java по умолчанию

1 голос
/ 10 августа 2011

Как говорят другие, это зависит от количества памяти, доступной для JVM.

Теоретически вы можете вычислить из памяти количество вызовов функций, если (а это большое значение, если), вы знаете функции и их потребление памяти.Поскольку (неоптимизированная) рекурсивная функция должна помещать все локальные переменные и параметры в стек, это очень зависит от функции.Это означает, что когда у вас есть X-функции без локальных и одного параметра int в стеке, вы получаете только X / 4, когда вы получаете один с 2-мя int-параметрами и 2-мя локальными переменными (игнорируя другие издержки фрейма стека, как исключение, адреса возврата,...).

...