У каждой JVM есть стек времени выполнения фреймов вызова метода.Каждый кадр метода содержит
- Ссылка на класс Java, содержащий этот метод.
- Стек операнда для хранения временных значений.
- Массив "локальных переменных" длясодержит аргументы функции и временные результаты.
Этот массив локальных переменных существует для того, чтобы при первом вызове функции аргументы этой функции могли где-то сохраняться.Массив локальных переменных фактически не содержит все локальные переменные, объявленные в исходном коде Java;скорее это скорее временный буфер для хранения ссылок на объекты Java, объявленные где-либо в куче, или для хранения значений, на которые ссылаются достаточно много раз, чтобы поместить их в стек времени выполнения было бы медленным или неэффективным.
Короче, вы правы, что локальные и глобальные хранятся в куче.Массив «локальных переменных» в потоках Java не соответствует этим локальным объектам, а скорее очищает пространство, используемое потоком при интерпретации байт-кода для метода.