Сложно-ли переполнить стек java? (подробности инсайд)

программирование java резинка стек

Нужда для проги возникла: насколько безопасно создавать толстенный стек вложенных вызовов в яве? Проблема немного неклассическая: есть граф переходов (объекты с большим числом указателей на другие объекты), по нему нужно долго и упорно ходить. Число узлов графа (т.е. создаваемых объектов) - сотни, макисмум тысячи. Число переходов, которые необходимо совершить по графу - до миллиона. Два варианта решения: через вложенные вызовы (т.е. объект вызывает метод другого, который, в свою очередь, вызывает метод 3-го и так далее много-много раз) или тож-самое, но "плоское", т.е. while(...){те-ж переходы, но в этом цикле + static-переменные для хранения истории переходов}. Первый вариант мне нравится больше, ибо красиво, мало и вообще кавайно. Но для этого надо-бы знать пределы растяжимости стека.
Читал, что ява-процессор (хардварная ява-машина) использует "барабанный" стек - когда место в нем кончается, низ стека (который не используется в текущих вычислениях) перемещается в область памяти, а потом восстанавливается. Но ничего такого-ж про обычную ява-машину не нашел.

Соответственно, ищу развернутую инфу и пруфлинк (круто было-б из спецификации ява-машины).

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

Примечание:
второй вариант сложнее для понимания и должен содержать некоторые нетривиальности.
Кромь прочего, говорю-ж, тема уже сама успела заинтересовать ) Ведь если кто не помнит/не знает, работа со стеком - это то, что позволяет оптимально работать именно с большой вложенностью всяких вызовов (настолько, что с серверной конфигурацией ява-машины позволяет обогнать аналогичную прогу на С с оптимизацией примерно на полтора порядка).

Примечание:
alex.hustle, уточните - какой стек вы имеете в виду? Коллекцию?

Примечание:
alex.hustle, благодарю за хорошую идею - сам как-то глупо до объекта-обходчика не додумался. Это впрямь позволит реализовать все наиболее кошерно)

Примечание:
Реализовал прогу кошерно: Обходчик юзает стратегию (точнее 2) из объектов-состояний. Все счастливы.
Касательно основного вопроса: таки да, выделяется стек вызовов из памяти приложения. Рекурсия торжествует, ибо его всяко хватит на многое. А если не хватит, "-Xmx" нам в руки )
Ответы:
лучше не париться поиском инфы и пользовать второй вариант - в нем вы сами сможете управлять переходами. Это даст вам большую гибкость, можно даже будет выделить "построитель переходов" в отдельный объект и на лету менять стратегии переходов.
стек - это структура данных организованная по принципу "первый пришел, последним ушел". Можно проэмулировать его коллекцией с методами Push и Pop.
Просто запустите бесконечную рекурсию со счетчиком и увидите, что память у вас закончится раньше, чем стек вызовов.


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.