Все знают что на ява нет указателей, есть ссылки на объекты (неделю назад узнал). Чтобы удалить объект с памяти следует удалить ссылки на него, т.е. присвоить null и после этого если на объект не осталось ссылок вм его удалит с памяти. А что если было создано огромное количество неявных ссылок на объект, которые фиг знает как найти, и при этом ты не можешь его удалить с памяти, System.gc() не поможет, что тогда делать?
Проблему «огромного количества неявных ссылок на объект, которые фиг знает как найти» решает хороший дизайн либо использование слабых или мягких ссылок (WeakReference, SoftReference). Но это уже зависит от контекста.
Ничего не сделаешь, такой ЯП. Приходится следить за ссылками, причем всегда будут утечки все равно. Любое большое приложение на Java со временем занимает все больше и больше ОЗУ..