Структура памяти в Java программировании
Структура памяти в Java достаточно сложна, но на начальном этапе обучения изучим две ее области: стек (stack) и куча (heap).
1. Куча
Java Heap (куча) используется Java Runtime для выделения памяти под объекты и JRE классы. Создание нового объекта также происходит в куче. Здесь работает сборщик мусора: освобождает память путем удаления объектов, на которые нет каких-либо ссылок.
Любой объект, созданный в куче, имеет глобальный доступ и на него могут ссылаться из любой части приложения.
2. Стек
Что такое стек? Стековая память в Java работает по схеме LIFO (Последний-зашел-Первый-вышел). Всякий раз, когда вызывается метод, в памяти стека создается новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок также перестает использоваться, тем самым предоставляя доступ для следующего метода.
Размер стека намного меньше объема памяти в куче.
Всякий раз, когда создается объект, он всегда хранится в куче, а в памяти стека содержится ссылка на него. Память стека содержит только локальные переменные примитивных типов и ссылки на объекты в куче.
Следующая картинка отображает разницу в создании примитивной и ссылочной переменной. Если создается примитивная локальная переменная int a = 10
, то ее значение хранится в стеке. При создании же ссылочной переменной Test a = new Test()
, сам объект создается в куче, а переменная Test a
- в стеке. Значение переменной Test a
- это ссылка на объект в куче.
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.