Ответ
Stack используется для хранения примитивов и ссылок на объекты, выделяется для каждого потока. Имеет ограниченный размер, доступ быстрый, память освобождается автоматически при выходе из метода.
Heap — общая область памяти для всех объектов. Размер динамический, доступ медленнее, сборщик мусора (GC) управляет освобождением памяти.
Пример:
void method() {
int x = 5; // в стеке
String s = new String("hello"); // объект в хипе, ссылка s в стеке
}