Нужда для проги возникла: насколько безопасно создавать толстенный стек вложенных вызовов в яве? Проблема немного неклассическая: есть граф переходов (объекты с большим числом указателей на другие объекты), по нему нужно долго и упорно ходить. Число узлов графа (т.е. создаваемых объектов) - сотни, макисмум тысячи. Число переходов, которые необходимо совершить по графу - до миллиона. Два варианта решения: через вложенные вызовы (т.е. объект вызывает метод другого, который, в свою очередь, вызывает метод 3-го и так далее много-много раз) или тож-самое, но "плоское", т.е. while(...){те-ж переходы, но в этом цикле + static-переменные для хранения истории переходов}. Первый вариант мне нравится больше, ибо красиво, мало и вообще кавайно. Но для этого надо-бы знать пределы растяжимости стека.
Читал, что ява-процессор (хардварная ява-машина) использует "барабанный" стек - когда место в нем кончается, низ стека (который не используется в текущих вычислениях) перемещается в область памяти, а потом восстанавливается. Но ничего такого-ж про обычную ява-машину не нашел.
Соответственно, ищу развернутую инфу и пруфлинк (круто было-б из спецификации ява-машины).
П.С. вопросы дизайна проги, при котором мне это все втемяшилось - малообсуждаемы, ибо просто интересно, да и фиг кто меня переспорит, что такая организация плоха.
Примечание:
второй вариант сложнее для понимания и должен содержать некоторые нетривиальности.
Кромь прочего, говорю-ж, тема уже сама успела заинтересовать ) Ведь если кто не помнит/не знает, работа со стеком - это то, что позволяет оптимально работать именно с большой вложенностью всяких вызовов (настолько, что с серверной конфигурацией ява-машины позволяет обогнать аналогичную прогу на С с оптимизацией примерно на полтора порядка).
Примечание:
alex.hustle, уточните - какой стек вы имеете в виду? Коллекцию?
Примечание:
alex.hustle, благодарю за хорошую идею - сам как-то глупо до объекта-обходчика не додумался. Это впрямь позволит реализовать все наиболее кошерно)
Примечание:
Реализовал прогу кошерно: Обходчик юзает стратегию (точнее 2) из объектов-состояний. Все счастливы.
Касательно основного вопроса: таки да, выделяется стек вызовов из памяти приложения. Рекурсия торжествует, ибо его всяко хватит на многое. А если не хватит, "-Xmx" нам в руки )
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.