| 
 Duplicate :   
 | 
|
| 
 Duplicate :   
 | 
|
| 
 Relates :   
 | 
|
| 
 Relates :   
 | 
LinkedBlockingQueue Nodes should unlink themselves before becoming garbage,
to prevent tenured Nodes from causing full GCs by retaining a reference to
all younger Nodes in the same queue.
For details and in-depth discussion, see:
http://thread.gmane.org/gmane.comp.java.jsr.166-concurrency/5758
Here's the fix, that has been shown to produce factor of 4 improvement in
a synthetic microbenchmark.
--- src/main/java/util/concurrent/LinkedBlockingQueue.java	18 May 2008
23:47:56 -0000	1.49
+++ src/main/java/util/concurrent/LinkedBlockingQueue.java	12 Feb 2009
01:00:43 -0000	1.50
@@ -133,7 +133,9 @@
      * @return the node
      */
     private E extract() {
-        Node<E> first = head.next;
+        Node<E> h = head;
+        Node<E> first = h.next;
+        h.next = null; // help GC
         head = first;
         E x = first.item;
         first.item = null;
  |