Стек-Куча
Stack-Heap Interaction Example (Пример взаимодействия стека и кучи)
Пример кода :
Описание :
- Как только мы запускаем программу, она загружает все классы Runtime в пространство Heap. Когда метод main () находится в строке 5, среда выполнения Java создает стековую память для использования потоком метода main ().
- Стр 6 создаётся локальная переменная test1 для хранения ссылки на новый объект в StringPool.
- Стр 7 создаётся локальная переменная test2 для хранения ссылки на новый объект в StringPool.
- Стр 8 создаётся локальная переменная а1 для хранения ссылки на новый объект String.
- Созданные переменные хранятся в памяти стека объекта main().
- В 10 стр производится вызов метода method_2 с передачей параметра a1 и выделением блока в верхней части стека для использования методом method_2().
- Т.к в Java передает все по значению, в стр 15 передаётся копия ссылки на объект a1.
- Стр 16 создаётся локальная переменная i;
- Стр 17 создаётся локальная переменная test3 для хранения ссылки на существующий объект в StringPool.
- Стр 18 создаётся локальная переменная а1 для хранения ссылки на новый объект в StringPool.
- Стр 19 создаётся локальная переменная a1 для хранения копии ссылки полученной в качестве параметра на объект созданный в методе main().
- Стр 20 закрывается блок метода method_2 и блок памяти освобождается.
- Стр 12 создаётся локальная переменная j;
- Стр 13 закрывается блок метода main(), а стековая память, созданная для метода main (), уничтожается. Кроме того, программа заканчивается на этой строке, поэтому Java Runtime освобождает всю память и завершает выполнение программы.