3

Si j'ai une structure de liste chaînée, et je mets en œuvre la méthode claire() comme suit:liés Liste implémentation en Java et Garbage Collection

public void clear() { 
    firstNode = null; 
    size = 0; 
} 

sera-il obtenir correctement encore les déchets ramassés, ou si je veux parcourir chaque nœud, en définissant nextNode à null? Aucun des nœuds ne peut être directement référencé depuis l'extérieur de la liste chaînée, donc il n'y a aucun cas où il y aurait une référence à l'un d'entre eux en dehors de ma classe, mais je ne sais pas si Java récupèrerait correctement les autres chaînés nœuds.

+1

exactement ce qui aurait été le problème avec le comptage de référence [C++ auto/smart pointeurs etc], pas pour GC cependant. – Fakrudeen

Répondre

11

Cela devrait être bien - Java gère les références cycliques etc sans problèmes.

1

pour vos informations, la mise en œuvre de LinkedList par Sun parse tous les éléments de la liste et les mettre à null

+1

C'est vrai, mais cela n'est nécessaire que parce que Java LinkedList est doublement lié –

2

Étant donné qu'aucun des noeuds de la liste ont des références externes. La définition de firstNode à null rendra tous les nœuds éligibles pour GC car il n'y aurait aucun moyen d'atteindre l'un des nœuds à partir d'une référence externe.

+0

+1 pour clarifier que GC ne compte pas les références, il détermine l'accessibilité. –