Стек-Куча

Stack-Heap Interaction Example (Пример взаимодействия стека и кучи)






Пример кода :





Описание :

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