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;
|