Ответ
Да, память в Java может закончиться, несмотря на автоматическую сборку мусора (GC). Основные причины:
- Утечки памяти – когда объекты больше не нужны, но остаются достижимыми (например, через статические коллекции).
- Большие структуры данных – загрузка огромных массивов/коллекций без очистки.
- Частые аллокации – быстрое создание объектов без времени на работу GC.
Пример утечки:
static List<Object> cache = new ArrayList<>();
void addToCache(Object data) {
cache.add(data); // Объекты никогда не удаляются
}
OOM (OutOfMemoryError) – исключение, возникающее при нехватке памяти в Heap. Можно увеличить Heap через -Xmx, но лучше оптимизировать код.