Может ли закончится память в Java

«Может ли закончится память в Java» — вопрос из категории Управление памятью, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, память в Java может закончиться, несмотря на автоматическую сборку мусора (GC). Основные причины:

  1. Утечки памяти – когда объекты больше не нужны, но остаются достижимыми (например, через статические коллекции).
  2. Большие структуры данных – загрузка огромных массивов/коллекций без очистки.
  3. Частые аллокации – быстрое создание объектов без времени на работу GC.

Пример утечки:

static List<Object> cache = new ArrayList<>();

void addToCache(Object data) {
    cache.add(data); // Объекты никогда не удаляются
}

OOM (OutOfMemoryError) – исключение, возникающее при нехватке памяти в Heap. Можно увеличить Heap через -Xmx, но лучше оптимизировать код.