Если у вас недостаточно памяти для запуска приложения, вы столкнетесь с замедлениями, длительным временем сбора мусора, событиями “остановки мира” и, в конечном итоге, ошибками из-за нехватки памяти. Возможно, это указывает, что куча слишком мала, но также может и значить, что в приложении произошла утечка памяти.
Теория конечно это хорошо и её тут много написано, но на практике всё это тёмный лес. Если есть утечка памяти, то память переполнится и найти эту утечку очень проблематично. Что насчет старого сборщика мусора JVM то он тупо начинает работать, когда памяти уже нет. Насчёт новых сборщиков я не знаю. Программисты Java почти никогда не думают о памяти и швыряют туда-сюда огромные массивы данных через функции фреймворка, думая что память резиновая и сборщик справится, но память рано или поздно кончается.
Когда увидел в тексте "разыменовывание" долго не мог понять откуда оно взялось в языке, где нет ручного управления памятью. Взглянул на примеры кода и тоже никакого разыменовывания там не увидел. Думал проблема перевода, но нет - в оригинале статьи тоже пишут про "dereferencing". Речь идет про обнуление ссылок, но никак не про разыменовывание.