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