Где в Java хранится последовательность вызовов методов?

«Где в Java хранится последовательность вызовов методов?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Последовательность вызовов методов хранится в стеке вызовов (Call Stack).

Принцип работы:

  • Это структура данных типа LIFO (Last In, First Out).
  • Каждый вызов метода создает новый стековый фрейм, который помещается на вершину стека. Фрейм содержит локальные переменные, параметры метода и информацию о точке возврата.
  • При завершении метода его фрейм удаляется из стека, и управление возвращается в предыдущий метод.

Пример и визуализация стека:

public class StackDemo {
    static void methodA() {
        methodB();
    }
    static void methodB() {
        System.out.println("Inside methodB");
    }
    public static void main(String[] args) {
        methodA();
    }
}

Порядок заполнения стека во время выполнения methodB():

  1. main()
  2. methodA()
  3. methodB() (вершина стека)

Важно: При глубокой рекурсии или большом количестве вызовов стек может переполниться, что вызовет ошибку StackOverflowError. Размер стека настраивается флагом JVM -Xss (например, -Xss2m).