Campi istanza, elementi array
Se è presente un riferimento a un oggetto, non può essere sottoposto a Garbage Collection. Soprattutto se quell'oggetto (e l'intero grafico dietro di esso) è grande, c'è solo un riferimento che interrompe la raccolta dei rifiuti e quel riferimento non è più necessario, questa è una situazione sfortunata.
I casi patologici sono l'oggetto che conserva un'istanza non necessaria per l'intero albero XML DOM utilizzato per configurarlo, l'MBean che non è stato annullato o il singolo riferimento a un oggetto da un'applicazione Web non distribuita che impedisce lo scaricamento di un intero programma di caricamento classi .
Quindi, a meno che tu non sia sicuro che l'oggetto che contiene il riferimento stesso verrà comunque raccolto dalla spazzatura (o anche allora), dovresti annullare tutto ciò che non ti serve più.
Variabili con ambito:
Se stai considerando di impostare una variabile locale su null prima della fine del suo ambito, in modo che possa essere recuperata dal garbage collector e contrassegnarla come "inutilizzabile da ora in poi", dovresti invece considerare di metterla in uno scope più limitato .
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; // <-- explicitly set to null
doSomethingElse();
}
diventa
{
{
BigObject obj = ...
doSomethingWith(obj);
} // <-- obj goes out of scope
doSomethingElse();
}
Anche gli ambiti lunghi e piatti sono generalmente dannosi per la leggibilità del codice. Anche l'introduzione di metodi privati per rompere le cose solo per quello scopo non è inaudita.