Sobes.tech
Junior — Middle

Este posibil un scurgere de memorie în aplicațiile Java și cum poate apărea?

sobes.tech AI

Răspuns de la AI

Da, scurgerile de memorie în aplicațiile Java sunt posibile, în ciuda existenței colectorului de gunoi. Ele apar atunci când obiectele care nu mai sunt necesare continuă să aibă referințe și nu pot fi eliminate din memorie.

Cauzele scurgerilor de memorie în Java:

  • Colecții statice (de exemplu, static List), în care sunt adăugate obiecte, dar nu sunt eliminate.
  • Ascultători sau callback-uri care nu se dezabonează și păstrează referințe.
  • Cache-uri fără limită de dimensiune.
  • Cicluri interne de referințe pe care colectorul de gunoi nu le poate curăța dacă există referințe externe.

Exemplu de scurgere cauzată de o colecție statică:

public class MemoryLeakExample {
    private static List<byte[]> cache = new ArrayList<>();

    public void addData() {
        // Fiecare apel adaugă un nou array care nu este eliminat
        cache.add(new byte[1024 * 1024]); // 1MB
    }
}

Dacă metoda addData este apelată de mai multe ori, memoria va crește, deoarece obiectele din cache nu sunt eliminate.

Pentru a preveni scurgerile, este important să gestionezi cu atenție ciclul de viață al obiectelor și referințelor, să utilizezi profile de memorie și instrumente de analiză.