United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
JDK-6805775 : LinkedBlockingQueue Nodes should unlink themselves before becoming garbage

Details
Type:
Bug
Submit Date:
2009-02-15
Status:
Closed
Updated Date:
2012-07-23
Project Name:
JDK
Resolved Date:
2010-11-30
Component:
core-libs
OS:
windows_vista,linux,generic
Sub-Component:
java.util.concurrent
CPU:
x86,generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
6u11,6u22,7
Fixed Versions:

Related Reports
Backport:
Backport:
Backport:
Duplicate:
Duplicate:
Relates:
Relates:

Sub Tasks

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

                                    

Comments
EVALUATION

changeset containing this fix:
  http://hg.openjdk.java.net/jdk7/tl/jdk/rev/49573ab3096a
                                     
2009-08-07
SUGGESTED FIX

See Martin Buchholz's preliminary webrev at:

http://cr.openjdk.java.net/~martin/webrevs/openjdk7/BlockingQueue/
                                     
2009-07-23
EVALUATION

Martin Buchholz said the following on 07/11/09 11:21:
> 
> The very focused fix of simply unlinking nodes
> when they drop off the queue is wrong,
> because it violates the "weakly consistent iterator" guarantees.
                                     
2009-07-11
EVALUATION

The suggested fix was put into Doug Lea's jsr166y repository but has not yet been pushed to OpenJDK. Martin Buchholz reports:

"The fix for this is not yet final. The code changes themselves are final,
but there's still a bit of test case work to do."
                                     
2009-07-03
SUGGESTED FIX

See description.
                                     
2009-02-15
EVALUATION

See description
                                     
2009-02-15



Hardware and Software, Engineered to Work Together