Вопрос о памяти кучи и вызове рекурсии с использованием java - PullRequest
0 голосов
/ 16 февраля 2020

Что если у меня есть функция, которая заканчивается вызовом самого себя (но не возвращает себя). Объекты предыдущего вызова удалены из памяти кучи или я переполнен?

play(){
//Lots of code here with objects
play();
}  

1 Ответ

0 голосов
/ 16 февраля 2020

Вы получите переполнение кучи, поскольку все собранные объекты остаются в памяти.

Простое правило: все создаваемые объекты остаются по крайней мере в памяти до тех пор, пока блок, в котором они были созданы, не будет закрыт. , Блок начинается с { и заканчивается соответствующим }.

. Вы можете разрешить более раннее удаление сборщика мусора из памяти, назначив null связанным переменным.

Но даже если вы не перегружаете кучу, вы также перегружаете стек такой бесконечной рекурсией. Стек требует некоторой памяти для каждого вызова метода.

...