Heap хранит объекты, созданные с помощью ключевого слова new, массивы и другие динамически выделяемые данные. Он является общей областью памяти для всех потоков.
Stack хранит примитивные типы данных (int, float, boolean и т.д.), ссылки на объекты в heap, локальные переменные и информацию о вызовах методов. Каждый поток имеет свой собственный stack.
Вот таблица для сравнения:
| Характеристика | Heap | Stack |
|---|---|---|
| Выделение памяти | Динамическое (Runtime) | Статическое (Compile-time) |
| Время жизни | До сборки мусора (Garbage Collection) | До завершения метода |
| Потокобезопасность | Не является | Потокобезопасен |
| Размер | Изменяемый | Фиксированный или ограниченный |
Пример создания объектов:
java