Instanzfelder, Array-Elemente
Wenn auf ein Objekt verwiesen wird, kann kein Müll gesammelt werden. Insbesondere wenn dieses Objekt (und das gesamte Diagramm dahinter) groß ist, gibt es nur eine Referenz, die die Speicherbereinigung stoppt, und diese Referenz wird nicht mehr wirklich benötigt. Dies ist eine unglückliche Situation.
Pathologische Fälle sind das Objekt, das eine unnötige Instanz für den gesamten XML-DOM-Baum beibehält, der zum Konfigurieren verwendet wurde, die MBean, die nicht abgemeldet wurde, oder der einzelne Verweis auf ein Objekt aus einer nicht bereitgestellten Webanwendung, der verhindert, dass ein ganzer Klassenladeprogramm entladen wird .
Wenn Sie also nicht sicher sind, dass das Objekt, das die Referenz selbst enthält, ohnehin (oder sogar dann) Müll gesammelt wird, sollten Sie alles auf Null setzen, was Sie nicht mehr benötigen.
Gültigkeitsbereichsvariablen:
Wenn Sie erwägen, eine lokale Variable vor dem Ende ihres Gültigkeitsbereichs auf null zu setzen, damit sie vom Garbage Collector zurückgefordert und als "von nun an unbrauchbar" markiert werden kann, sollten Sie sie stattdessen in einen eingeschränkteren Gültigkeitsbereich verschieben .
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; // <-- explicitly set to null
doSomethingElse();
}
wird
{
{
BigObject obj = ...
doSomethingWith(obj);
} // <-- obj goes out of scope
doSomethingElse();
}
Lange, flache Bereiche sind im Allgemeinen auch für die Lesbarkeit des Codes schlecht. Die Einführung privater Methoden, um Dinge nur für diesen Zweck aufzubrechen, ist ebenfalls keine Seltenheit.