私は、これは本当に愚かな質問ですが、ここに行く恐れる:クリア()のimpl
はなぜJavaのデフォルトのLinkedListの実装の明確な方法は、リストを歩くと、すべてのノードを外すためにわざわざでしょうか?なぜヘッダーを外してリストの残りの部分を接続したままにしておかないのですか?GCはとにかくそれを取得しますか?
は、ここでの方法です:
/**
* 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++;
}
なぜそれを歩きますか?なぜheader.next = header.previous = header;
にスキップしてみませんか?
最高の私はそれがGCを助けるのですか?このリンクhttp://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#997442のことを示唆している。
TIA ...
私は、外部コードがLinkedList $ Entryへの参照を取得する方法がないと言っていますが、間接的にLinkedList $ ListItrを使用すると、確かに可能です。 – overthink
ノードを保持するのは何ですか? IteratorまたはsubListですが、これらは有効ではないので、残っていることはありません。 –
@Tom:これをしなかった場合、subListとIteratorは引き続き動作しますが、コレクションフレームワークはフェイルファーストを試みますが、保証はできません。 –