Ответ
Стек используется для хранения примитивных типов и ссылок на объекты, имеет ограниченный размер и работает по принципу LIFO. Куча - для хранения объектов, размер динамически изменяется.
Пример:
void method() {
int x = 5; // хранится в стеке
String s = new String(); // объект в куче, ссылка в стеке
}
Почему разделение?
- Производительность - доступ к стеку быстрее.
- Управление памятью - стек очищается автоматически при выходе из метода, кучу чистит GC.
- Безопасность - изоляция данных между потоками (у каждого свой стек).