Как устроена память в Java (JVM)? Какие есть области: стек, хип?
Answer from AI
sobes.tech AI
Память в JVM делится на несколько ключевых областей:
-
Heap (куча) — область для хранения объектов и массивов. Все объекты, создаваемые через
new, размещаются в куче. Heap управляется сборщиком мусора (Garbage Collector), который освобождает память от неиспользуемых объектов. -
Stack (стек) — область памяти для хранения фреймов вызовов методов. Каждый вызов метода создает фрейм, в котором хранятся локальные переменные, параметры метода и адрес возврата. Стек работает по принципу LIFO и управляется JVM автоматически.
-
Метаспейс (Metaspace) — область для хранения метаданных классов, загруженных JVM, включая информацию о методах, полях и т.д. В более старых версиях JVM это была PermGen.
-
Регистры и другие внутренние области — для работы JVM, но они менее заметны разработчику.
Пример:
public void example() {
int a = 10; // хранится в стеке
Object obj = new Object(); // объект в куче, ссылка в стеке
}
Таким образом, стек отвечает за управление вызовами и локальными переменными, а куча — за хранение объектов с динамическим временем жизни.