В Java память разделена на несколько областей:
- Stack (стек) - здесь хранятся все локальные переменные и параметры методов. При вызове метода создается новый фрейм в стеке, который хранит параметры метода, локальные переменные и ссылки на объекты в heap.
- Heap (куча) - здесь хранятся все объекты Java и массивы. При создании объекта Java выделяется место в куче и возвращается ссылка на объект. Объекты Java удаляются из памяти автоматически сборщиком мусора, когда на них больше не остается ссылок.
- Method Area (область методов) - здесь хранится информация о классах, методах и других метаданных. Эта область разделяется между всеми потоками, и каждый класс загружается в Method Area только один раз.
- Constant Pool (константный пул) - здесь хранятся все литералы, такие как числа, строки и ссылки на классы.
В памяти Java также есть нативные методы и статические переменные, которые хранятся в области памяти, называемой Native Heap.