我對OpenJDK的LinkedBlockingQueue實現中的Node類的結構(在java.util.concurrent中)有點困惑。OpenJDK的LinkedBlockingQueue實現:節點類和GC
我抄錄如下節點類的描述:
static class Node<E> {
E item;
/**
* One of:
* - the real successor Node
* - this Node, meaning the successor is head.next
* - null, meaning there is no successor (this is the last node)
*/
Node<E> next;
Node(E x) { item = x; }
}
具體而言,我對接下來的第二選擇困惑(「這個節點,這意味着繼任者是head.next」)。
這似乎是直接關係到出隊的方法,它看起來像:
private E dequeue() {
// assert takeLock.isHeldByCurrentThread();
// assert head.item == null;
Node<E> h = head;
Node<E> first = h.next;
h.next = h; // help GC
head = first;
E x = first.item;
first.item = null;
return x;
}
因此,我們已經刪除了當前的頭,我們設置它的旁邊,本身是「幫助GC」 。
這對GC有何幫助?對GC有幫助嗎?
可能重複://計算器.com/questions/8819342/strange-code-in-java-util-concurrent-linkedblockingqueue) – artbristol 2012-04-11 16:23:54
它們可能是相關的,但util.concurrent似乎有在其他問題中提到的相同類型的代碼在很多地方(即製作一個成員變量的本地副本),這使我認爲他們是不同的問題。如果他們實際上是相關的,它會很有趣! – kanak 2012-04-11 23:17:27