From c35f79810f604a83ed8e6437ada8d02cc0a6885f Mon Sep 17 00:00:00 2001 From: Doug Lea Date: Thu, 7 Apr 2016 10:12:08 -0700 Subject: [PATCH] 8151579: Optimize ConcurrentHashMap.Node Reviewed-by: martin, psandoz, forax --- .../util/concurrent/ConcurrentHashMap.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java index d7cfc66f7a0..d6ae6557978 100644 --- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java +++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java @@ -628,10 +628,14 @@ public class ConcurrentHashMap extends AbstractMap volatile V val; volatile Node next; - Node(int hash, K key, V val, Node next) { + Node(int hash, K key, V val) { this.hash = hash; this.key = key; this.val = val; + } + + Node(int hash, K key, V val, Node next) { + this(hash, key, val); this.next = next; } @@ -1024,8 +1028,7 @@ public class ConcurrentHashMap extends AbstractMap if (tab == null || (n = tab.length) == 0) tab = initTable(); else if ((f = tabAt(tab, i = (n - 1) & hash)) == null) { - if (casTabAt(tab, i, null, - new Node(hash, key, value, null))) + if (casTabAt(tab, i, null, new Node(hash, key, value))) break; // no lock when adding to empty bin } else if ((fh = f.hash) == MOVED) @@ -1048,8 +1051,7 @@ public class ConcurrentHashMap extends AbstractMap } Node pred = e; if ((e = e.next) == null) { - pred.next = new Node(hash, key, - value, null); + pred.next = new Node(hash, key, value); break; } } @@ -1709,7 +1711,7 @@ public class ConcurrentHashMap extends AbstractMap Node node = null; try { if ((val = mappingFunction.apply(key)) != null) - node = new Node(h, key, val, null); + node = new Node(h, key, val); } finally { setTabAt(tab, i, node); } @@ -1740,7 +1742,7 @@ public class ConcurrentHashMap extends AbstractMap if (pred.next != null) throw new IllegalStateException("Recursive update"); added = true; - pred.next = new Node(h, key, val, null); + pred.next = new Node(h, key, val); } break; } @@ -1909,7 +1911,7 @@ public class ConcurrentHashMap extends AbstractMap try { if ((val = remappingFunction.apply(key, null)) != null) { delta = 1; - node = new Node(h, key, val, null); + node = new Node(h, key, val); } } finally { setTabAt(tab, i, node); @@ -1951,8 +1953,7 @@ public class ConcurrentHashMap extends AbstractMap if (pred.next != null) throw new IllegalStateException("Recursive update"); delta = 1; - pred.next = - new Node(h, key, val, null); + pred.next = new Node(h, key, val); } break; } @@ -2030,7 +2031,7 @@ public class ConcurrentHashMap extends AbstractMap if (tab == null || (n = tab.length) == 0) tab = initTable(); else if ((f = tabAt(tab, i = (n - 1) & h)) == null) { - if (casTabAt(tab, i, null, new Node(h, key, value, null))) { + if (casTabAt(tab, i, null, new Node(h, key, value))) { delta = 1; val = value; break; @@ -2065,8 +2066,7 @@ public class ConcurrentHashMap extends AbstractMap if ((e = e.next) == null) { delta = 1; val = value; - pred.next = - new Node(h, key, val, null); + pred.next = new Node(h, key, val); break; } } @@ -2227,7 +2227,7 @@ public class ConcurrentHashMap extends AbstractMap static final class ForwardingNode extends Node { final Node[] nextTable; ForwardingNode(Node[] tab) { - super(MOVED, null, null, null); + super(MOVED, null, null); this.nextTable = tab; } @@ -2263,7 +2263,7 @@ public class ConcurrentHashMap extends AbstractMap */ static final class ReservationNode extends Node { ReservationNode() { - super(RESERVED, null, null, null); + super(RESERVED, null, null); } Node find(int h, Object k) { @@ -2690,12 +2690,12 @@ public class ConcurrentHashMap extends AbstractMap } /** - * Returns a list on non-TreeNodes replacing those in given list. + * Returns a list of non-TreeNodes replacing those in given list. */ static Node untreeify(Node b) { Node hd = null, tl = null; for (Node q = b; q != null; q = q.next) { - Node p = new Node(q.hash, q.key, q.val, null); + Node p = new Node(q.hash, q.key, q.val); if (tl == null) hd = p; else @@ -2801,7 +2801,7 @@ public class ConcurrentHashMap extends AbstractMap * Creates bin with initial set of nodes headed by b. */ TreeBin(TreeNode b) { - super(TREEBIN, null, null, null); + super(TREEBIN, null, null); this.first = b; TreeNode r = null; for (TreeNode x = b, next; x != null; x = next) {