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) {