Java · Intermediário · Português · Técnico
vazamento de memória
Situação em que objetos sem uso continuam alcançáveis por alguma referência esquecida, o coletor não os libera, e a heap cresce até estourar.
Onde usar
Em Java aparece em caches estáticos sem limite, listeners não removidos e ThreadLocal em pools. O sintoma é a heap crescendo após cada GC.
Em código
class Cache {
static final Map<String, byte[]> M =
new HashMap<>();
static void guardar(String k) {
M.put(k, new byte[1 << 20]); // nunca sai
}
}Exemplos
A heap só cresce: deve ter um vazamento de memória no cache.
O listener nunca foi removido e causou um vazamento de memória.
Cuidado
Não é falta de free, pois o GC existe: o vazamento em Java é de referências, e se resolve cortando-as.
Sinônimos
memory leak