Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6805775

LinkedBlockingQueue Nodes should unlink themselves before becoming garbage

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 7
    • 6u11, 6u22, 7
    • core-libs
    • None
    • b70
    • generic, x86
    • generic, linux, windows_vista
    • Verified

        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;

              chegar Chris Hegarty
              dholmes David Holmes
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: