Campos de instância, elementos de matriz
Se houver uma referência a um objeto, ele não pode ser coletado como lixo. Especialmente se esse objeto (e todo o gráfico por trás dele) for grande, há apenas uma referência que está interrompendo a coleta de lixo e essa referência não é mais necessária, o que é uma situação lamentável.
Casos patológicos são o objeto que retém uma instância não missária para toda a árvore XML DOM que foi usada para configurá-lo, o MBean que não foi cancelado ou a única referência a um objeto de um aplicativo da web não implantado que impede que um carregador de classe inteiro seja descarregado .
Portanto, a menos que você tenha certeza de que o objeto que contém a própria referência será coletado como lixo de qualquer maneira (ou mesmo assim), você deve anular tudo o que não é mais necessário.
Variáveis com escopo:
Se você está considerando definir uma variável local como nula antes do final de seu escopo, para que ela possa ser recuperada pelo coletor de lixo e marcá-la como "inutilizável de agora em diante", você deve considerar colocá-la em um escopo mais limitado. .
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; // <-- explicitly set to null
doSomethingElse();
}
torna-se
{
{
BigObject obj = ...
doSomethingWith(obj);
} // <-- obj goes out of scope
doSomethingElse();
}
Escopos longos e simples geralmente são ruins para a legibilidade do código também. A introdução de métodos privados para separar as coisas apenas para esse propósito também não é algo inédito.