Ответ
Локальные переменные методов (включая параметры) хранятся в стеке памяти (Stack Memory), в области, называемой стековым фреймом (stack frame).
Как это работает:
- При каждом вызове метода JVM создает для него новый стековый фрейм и помещает его на вершину стека потока.
- В этом фрейме выделяется память для:
- Примитивных переменных (
int,boolean,charи т.д.) — значение хранится прямо в стеке. - Ссылок на объекты — сама ссылка (адрес памяти) хранится в стеке, а объект, на который она указывает, размещается в куче (Heap Memory).
- Примитивных переменных (
- По завершении метода его фрейм удаляется (pop) из стека, и все локальные переменные уничтожаются.
Пример:
public void calculate(int multiplier) { // Параметр 'multiplier' — в стеке
int localValue = 10; // Примитив 'localValue' — в стеке
String message = "Result: "; // Ссылка 'message' — в стеке, объект String — в куче
Object data = new Object(); // Ссылка 'data' — в стеке, объект Object — в куче
} // Конец метода: фрейм удаляется, localValue и ссылки уничтожаются.
// Объекты в куче будут удалены сборщиком мусора, если на них не осталось ссылок.
Почему это важно: Такая организация обеспечивает изоляцию данных методов, быстрый доступ к переменным и автоматическое управление памятью для локальных данных.