Champs d'instance, éléments de tableau
S'il existe une référence à un objet, il ne peut pas être récupéré. Surtout si cet objet (et tout le graphique derrière) est gros, il n'y a qu'une seule référence qui arrête le ramasse-miettes, et cette référence n'est plus vraiment nécessaire, c'est une situation malheureuse.
Les cas pathologiques sont l'objet qui conserve une instance unnessary à l'ensemble de l'arborescence DOM XML qui a été utilisée pour le configurer, le MBean qui n'a pas été désenregistré, ou la référence unique à un objet d'une application Web non déployée qui empêche tout un chargeur de classe d'être déchargé .
Donc, à moins que vous ne soyez sûr que l'objet qui contient la référence lui-même sera de toute façon récupéré (ou même alors), vous devez annuler tout ce dont vous n'avez plus besoin.
Variables de portée:
Si vous envisagez de définir une variable locale sur null avant la fin de sa portée, afin qu'elle puisse être récupérée par le garbage collector et la marquer comme "inutilisable à partir de maintenant", vous devriez plutôt envisager de la placer dans une portée plus limitée. .
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; // <-- explicitly set to null
doSomethingElse();
}
devient
{
{
BigObject obj = ...
doSomethingWith(obj);
} // <-- obj goes out of scope
doSomethingElse();
}
Les portées longues et plates sont généralement mauvaises pour la lisibilité du code. Il n'est pas rare non plus d'introduire des méthodes privées pour briser les choses juste à cette fin.