6429289: (se) sun.nio.ch.SelectorImpl.processDeregisterQueue creates excessive garbage
authorsherman
Wed, 16 Jul 2008 15:24:15 -0700
changeset 843 e50aa264deca
parent 842 93b8777f4184
child 844 3e71bbfedb95
6429289: (se) sun.nio.ch.SelectorImpl.processDeregisterQueue creates excessive garbage Summary: Check if the cancelledKeys is empty or not before creating iterator Reviewed-by: alanb
jdk/src/share/classes/sun/nio/ch/SelectorImpl.java
--- a/jdk/src/share/classes/sun/nio/ch/SelectorImpl.java	Wed Jul 16 15:09:24 2008 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/SelectorImpl.java	Wed Jul 16 15:24:15 2008 -0700
@@ -142,18 +142,20 @@
         // Precondition: Synchronized on this, keys, and selectedKeys
         Set cks = cancelledKeys();
         synchronized (cks) {
-            Iterator i = cks.iterator();
-            while (i.hasNext()) {
-                SelectionKeyImpl ski = (SelectionKeyImpl)i.next();
-                try {
-                    implDereg(ski);
-                } catch (SocketException se) {
-                    IOException ioe = new IOException(
-                        "Error deregistering key");
-                    ioe.initCause(se);
-                    throw ioe;
-                } finally {
-                    i.remove();
+            if (!cks.isEmpty()) {
+                Iterator i = cks.iterator();
+                while (i.hasNext()) {
+                    SelectionKeyImpl ski = (SelectionKeyImpl)i.next();
+                    try {
+                        implDereg(ski);
+                    } catch (SocketException se) {
+                        IOException ioe = new IOException(
+                            "Error deregistering key");
+                        ioe.initCause(se);
+                        throw ioe;
+                    } finally {
+                        i.remove();
+                    }
                 }
             }
         }