Heap/stack
Память в Java разбита на 2 области
Stack - работает по принципу LIFO (last in first out), представляет собой список в котором хранятся переменные, ссылки на объекте, и методы. Всякий раз, когда вызывается метод в стеке выделяется под него память, и метод кладется на саму верхушку стека, далее по заверешнию выполнения, метод удаляется из стека, тем самым высвобождая память.
Если память в стеке кончится, будет выброшено исключение StackOverFlowError. Можно попробовать сделать это, написвав такую рекурсивную функцию, она будет вызывать сама себя до бесконечности, пока собственно не закончится память. Стек является потокобезопасным, т.к под каждый поток создается свой стек.
fun summ(a:Int, b: Int){
summ(2,3)
}
Heap (куча) - в этой области памяти лежат все объекты и классы. После создания нового объекта, он попадает сюда, в кучу, а ссылка на него хранится в стеке. Все объекты в куче имеют глобальный доступ, что делает их НЕ ПОТОКОБЕЗОПАСНЫМИ.
Куча разбита на несколько сегментов,
Old generation (tenured) и New generation, new generation в свою очередь разбит на 3 сегмента: eden, survivor0, sruvivor1.
Около минуты
9 апреля 2023