Java: Stackoverflow в конечной рекурсии - PullRequest
0 голосов
/ 27 августа 2011

Я написал парсер javaCC для некоторых логических выражений высказываний.Выражения могут быть довольно длинными, 30 000 символов.

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

Может быть, есть какой-нибудь параметр VM, который определяет размер стека?

Или что бы вы сделали в таких случаях?

Спасибо

Ответы [ 2 ]

4 голосов
/ 27 августа 2011

Да, используйте параметр -Xss. e.g.:

java -Xss4m Blah

устанавливает размер стека равным 4 МБ.

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

Хотя вы можете изменить размер стека в соответствии с ответом Оли, я бы посоветовал вам попытаться найти альтернативный подход, который не так глубоко повторяется. Например, вы можете захотеть создать стек или очередь из «результатов на данный момент» или чего-то еще, чтобы имитировать рекурсию, но используя пространство кучи вместо использования стека. Увеличение размера стека виртуальных машин всегда кажется мне «решением», которое лишь немного задерживает проблему.

(Это также означает, что если вы в конечном итоге получите трассировки стека, они будут чудовищными ... тогда как, если вы используете соответствующую диагностику для стека "вещей, на которые вы смотрите", вы можете получить управляемая данными диагностика вместо основанных на кадрах стека.)

...