I fear this is a really stupid question, but here goes:
Why does the clear method in Java’s default LinkedList implementation bother to walk the list and unhook all the nodes? Why not just unhook the header and leave the rest of the list connected — the GC will get it anyway, no?
Here’s the method:
/** * Removes all of the elements from this list. */ public void clear() { Entry<E> e = header.next; while (e != header) { Entry<E> next = e.next; e.next = e.previous = null; e.element = null; e = next; } header.next = header.previous = header; size = 0; modCount++; }
Why walk it? Why not just skip to header.next = header.previous = header;?
Best I can figure is it helps the GC…? This link http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#997442 sort of suggests that.
TIA…
Their method ensures that even if other code still holds references to particular nodes, the other nodes will be GC’ed.
Otherwise, even a single external reference to one of the nodes would prevent the entire chain from being collected.
Also, other operations in the list might be going on simultaneously (e.g. views through
subList()orCollections.unmodifiableList(), iterators), and this ensures that those things perceive the list as ’empty’ immediately.