Sobes.tech
Назад к вопросам
Junior — Middle
65

Можете объяснить, что означает утечка памяти в языке Java и почему она возникает?

Компании, где спрашивали
Т-БанкТ-Банк

Ответ от нейросети

sobes.tech AI

Утечка памяти в Java — это ситуация, когда объекты, которые больше не нужны программе, не освобождаются сборщиком мусора, потому что на них всё ещё существуют ссылки. В результате память, занимаемая этими объектами, не освобождается, что может привести к увеличению потребления памяти и, в конечном итоге, к ошибкам OutOfMemoryError.

Причины утечек памяти в Java:

  • Долгоживущие ссылки на объекты, которые уже не нужны (например, статические коллекции, в которые добавляются элементы, но не удаляются).
  • Внутренние кэши, которые не очищаются.
  • Слушатели или коллбэки, которые не отписываются и удерживают объекты.

Пример:

List<byte[]> list = new ArrayList<>();
while(true) {
    list.add(new byte[1024 * 1024]); // постоянно добавляем объекты в список
}

В этом примере список постоянно растёт, и объекты не могут быть удалены сборщиком мусора, что приводит к утечке памяти.