Рубрики
Без рубрики

Быстрые действия на Java. Стек вызовов

Вступление Эта серия будет посвящена базовому пониманию Java…. С пометкой java, новички, тристан.

  • Эта серия будет посвящена базовому пониманию Java. Всякий раз, когда я ловлю себя на том, что спрашиваю: “Как это работает?”. Я создам сообщение в блоге и размещу его здесь. Эта серия не будет в порядке, поэтому не стесняйтесь читать любой пост, который вы сочтете наиболее актуальным. Все мои ссылки на этот пост в блоге можно найти здесь

Что такое стек вызовов?

  • Теперь мои рассуждения о том, что такое стек вызовов, на самом деле были рекурсией. Если вы попытаетесь изучить рекурсию, как я сейчас пытаюсь это сделать, вы в конечном итоге столкнетесь со словами стек вызовов . При рекурсии все предыдущие вызовы методов сохраняются внутри стека вызовов. С учетом сказанного мы можем вернуться к рассматриваемому вопросу. Что такое стек вызовов? Ну, это то, что программа использует для отслеживания вызовов своих методов и состоит из стековых фреймов , один кадр стека для каждого вызова метода. Поэтому, когда мы вызываем метод, он добавляется в стек вызовов. Также обратите внимание на stack часть стека вызовов . Это говорит нам о том, что стек вызовов работает на основе основных принципов стека `first-in-last-out’ . Вот почему вы часто будете читать терминологию выталкивания и нажатия в стек вызовов.

Что хранится в стеке фреймов?

  • Как я упоминал ранее, стек вызовов фактически состоит из фреймов стека, по одному для каждого вызова метода. Но что на самом деле содержат эти стековые фреймы? Ну, в основном они состоят из 4 вещей:

  • 1) Локальные переменные (переменные внутри методов)

  • 2) Аргументы, переданные в метод

  • 3) Информация о фрейме стека вызывающего абонента

  • 4) Обратный адрес. Обычно это находится где-то в середине кода вызывающего абонента

  • Каждый вызов метода создает свой собственный фрейм стека, который занимает место в стеке вызовов. Это становится особенно важным при работе с рекурсией, которая имеет дело исключительно с повторяющимися вызовами методов. Если у вас слишком много кадров стека, добавленных в стек вызовов, вы получите переполнение стека , что является распространенной логической ошибкой при рекурсии.

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

Оригинал: “https://dev.to/theplebdev/java-quickies-the-call-stack-3g4g”