Каким образом организована память в стеке и куче и как они взаимодействуют между собой?
Answer from AI
sobes.tech AI
В Java память организована в две основные области: стек (stack) и куча (heap).
-
Стек — это область памяти, где хранятся локальные переменные и вызовы методов. Каждый поток имеет свой собственный стек. Данные в стеке имеют короткий срок жизни — они создаются при вызове метода и удаляются при его завершении. Стек работает по принципу LIFO (последним вошёл — первым вышел).
-
Куча — это область памяти для объектов и массивов, которые создаются динамически с помощью оператора
new. Объекты в куче живут до тех пор, пока на них есть ссылки, и управляются сборщиком мусора (Garbage Collector).
Взаимодействие:
- В стеке хранятся ссылки на объекты в куче.
- При вызове метода создаётся новый фрейм в стеке с локальными переменными и параметрами.
- Если локальная переменная — примитив, она хранится в стеке, если объект — в стеке хранится ссылка на объект в куче.
Пример:
public void example() {
int a = 10; // переменная 'a' в стеке
String s = new String("hello"); // ссылка 's' в стеке, объект в куче
}
Таким образом, стек обеспечивает быстрый доступ к локальным данным и управление вызовами, а куча — хранение объектов с динамическим временем жизни.