В чем разница между heap и stack?



Heap
используется всеми частями приложения, в то время как stack используется лишь главным потоком выполнения программы.



Каждый раз когда мы создаем объект(практически всегда используя ключевое слово new) - этот объект хранится в heap, а в stack хранится ссылка на этот объект:



Person person = new Person();

тут мы создаем новый объект Person(), после чего он сразу же помещается в heap, а person становится ссылкой на этот объект и хранится в stack.



Stack - упорядоченная структура и работает по схеме LIFO(Last-In-First-Out). у heap весь доступ к объектам происходит по ссылкам из stack.



Heap в разы больше stack, stack работает быстрее благодаря структуре, stack "живет" короткий промежуток времени, в то время как heap "живет" весь "жизненный цикл" программы.