Campos de instancia, elementos de matriz
Si hay una referencia a un objeto, no se puede recolectar basura. Especialmente si ese objeto (y todo el gráfico detrás de él) es grande, solo hay una referencia que detiene la recolección de basura, y esa referencia ya no es realmente necesaria, esa es una situación desafortunada.
Los casos patológicos son el objeto que conserva una instancia no necesaria para todo el árbol DOM XML que se usó para configurarlo, el MBean que no se eliminó del registro o la referencia única a un objeto de una aplicación web no implementada que evita que se descargue un cargador de clases completo .
Entonces, a menos que esté seguro de que el objeto que contiene la referencia en sí será recolectado como basura de todos modos (o incluso entonces), debe anular todo lo que ya no necesita.
Variables de ámbito:
Si está considerando establecer una variable local en nula antes de que finalice su alcance, para que el recolector de basura pueda reclamarla y marcarla como "inutilizable a partir de ahora", debería considerar colocarla en un alcance más limitado. .
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; // <-- explicitly set to null
doSomethingElse();
}
se convierte en
{
{
BigObject obj = ...
doSomethingWith(obj);
} // <-- obj goes out of scope
doSomethingElse();
}
Los ámbitos largos y planos también son generalmente malos para la legibilidad del código. La introducción de métodos privados para dividir las cosas solo con ese propósito tampoco es inaudita.