*"Personnellement, je me fie à l'annulation des variables comme un substitut pour une suppression future appropriée. Par exemple, je prends le temps d'annuler tous les éléments d'un tableau avant de supprimer (rendre nul) le tableau lui-même."
C'est inutile. Ainsi, si j'ai un objet x avec une référence (=variable) a qui pointe vers lui, la GC ne le supprimera pas, car il existe une référence à cet objet :
a -> x
Si vous annulez un que cela se produit :
a -> null
x
Donc maintenant x n'a pas de référence pointant vers lui et sera supprimé. La même chose se produit lorsque vous définissez a comme référence à un objet différent de x.
Ainsi, si vous avez un tableau arr qui fait référence aux objets x, y et z et une variable a qui fait référence au tableau, cela ressemble à cela :
a -> arr -> x
-> y
-> z
Si vous annulez un que cela se produit :
a -> null
arr -> x
-> y
-> z
Donc, le GC trouve que arr n'a pas de référence et le supprime, ce qui donne cette structure :
a -> null
x
y
z
Maintenant, le GC trouve x, y et z et les supprime également. Nuller chaque référence dans le tableau n'améliorera rien, cela ne fera qu'utiliser du temps CPU et de l'espace dans le code (ceci dit, cela ne fera pas plus mal que cela. Le GC sera toujours capable de fonctionner comme il le devrait).
158 votes
Ok... mettons une chose au clair. Ce n'est pas parce que vous pensez qu'une chose est une mauvaise pratique et qu'il ne faut pas l'encourager à la faire, qu'elle mérite un vote négatif. Il s'agit d'une question claire et valide, demandant s'il existe un moyen de libérer de la mémoire en Java sans dépendre du garbage collection. Bien que cela puisse être découragé et généralement pas utile ou une bonne idée, vous ne pouvez pas savoir qu'il n'y a pas de scénarios où il peut être nécessaire sans savoir ce que Felix sait. Felix n'a peut-être même pas l'intention de l'utiliser. Il peut simplement vouloir savoir si c'est possible. Cela ne mérite en aucun cas un vote négatif.
7 votes
À titre de précision, cette remarque s'adresse à la personne qui a voté contre ce projet, et pas nécessairement aux commentaires précédents.