Apoio escrito: o que ainda está alcançável?
Este apoio reexplica heap, referências e alcançabilidade com uma lista que mantém um array vivo. Objetos e arrays ficam na heap. Variáveis locais fazem parte da execução de um método e podem guardar referências a esses objetos. O garbage collector recupera objetos que não podem mais ser alcançados; ele não sabe se um objeto ainda é útil para a regra do programa.
import java.util.ArrayList;
import java.util.List;
public class Referencias {
public static void main(String[] args) {
List<byte[]> historico = new ArrayList<>();
byte[] relatorio = new byte[1024];
historico.add(relatorio);
relatorio = null;
System.out.println(historico.get(0).length); // 1024
historico.clear();
System.out.println(historico.size()); // 0
}
}
Atribuir null remove a referência local, mas a lista ainda alcança o array. Depois de clear, se não houver outra referência, o array fica elegível para coleta. Elegível não significa coletado naquele instante: a JVM decide quando executar a coleta.
Material complementar da Fernanda
- Guia avançado: Garbage Collector — Relacione stack, heap e alcançabilidade ao exemplo desta aula. Atribuir
nulla uma variável não basta se outra referência alcançável retiver o objeto. O GC não impede todos os vazamentos nem garante memória infinita.
Pratique com /aprender
Copie o comando e cole no chat para iniciar uma prática guiada:
/aprender Pratique heap, referências e garbage collector em Java 21. Mostre um grafo pequeno de objetos e peça que eu diga o que continua alcançável após remover uma referência. Explique a diferença entre elegível para coleta e coletado. Uma pergunta por vez, sem antecipar a resposta.
