< prev index next >
src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java
Print this page
rev 17358 : 8182487: Add Unsafe.objectFieldOffset(Class, String)
Reviewed-by: dsimms, twisti, bchristi, mgerdin
*** 3305,3323 ****
return false;
return true;
}
private static final Unsafe U = Unsafe.getUnsafe();
! private static final long LOCKSTATE;
! static {
! try {
! LOCKSTATE = U.objectFieldOffset
! (TreeBin.class.getDeclaredField("lockState"));
! } catch (ReflectiveOperationException e) {
! throw new Error(e);
! }
! }
}
/* ----------------Table Traversal -------------- */
/**
--- 3305,3316 ----
return false;
return true;
}
private static final Unsafe U = Unsafe.getUnsafe();
! private static final long LOCKSTATE
! = U.objectFieldOffset(TreeBin.class, "lockState");
}
/* ----------------Table Traversal -------------- */
/**
*** 6379,6409 ****
private static final long CELLVALUE;
private static final int ABASE;
private static final int ASHIFT;
static {
- try {
SIZECTL = U.objectFieldOffset
! (ConcurrentHashMap.class.getDeclaredField("sizeCtl"));
TRANSFERINDEX = U.objectFieldOffset
! (ConcurrentHashMap.class.getDeclaredField("transferIndex"));
BASECOUNT = U.objectFieldOffset
! (ConcurrentHashMap.class.getDeclaredField("baseCount"));
CELLSBUSY = U.objectFieldOffset
! (ConcurrentHashMap.class.getDeclaredField("cellsBusy"));
CELLVALUE = U.objectFieldOffset
! (CounterCell.class.getDeclaredField("value"));
ABASE = U.arrayBaseOffset(Node[].class);
int scale = U.arrayIndexScale(Node[].class);
if ((scale & (scale - 1)) != 0)
throw new Error("array index scale not a power of two");
ASHIFT = 31 - Integer.numberOfLeadingZeros(scale);
- } catch (ReflectiveOperationException e) {
- throw new Error(e);
- }
// Reduce the risk of rare disastrous classloading in first call to
// LockSupport.park: https://bugs.openjdk.java.net/browse/JDK-8074773
Class<?> ensureLoaded = LockSupport.class;
}
--- 6372,6398 ----
private static final long CELLVALUE;
private static final int ABASE;
private static final int ASHIFT;
static {
SIZECTL = U.objectFieldOffset
! (ConcurrentHashMap.class, "sizeCtl");
TRANSFERINDEX = U.objectFieldOffset
! (ConcurrentHashMap.class, "transferIndex");
BASECOUNT = U.objectFieldOffset
! (ConcurrentHashMap.class, "baseCount");
CELLSBUSY = U.objectFieldOffset
! (ConcurrentHashMap.class, "cellsBusy");
CELLVALUE = U.objectFieldOffset
! (CounterCell.class, "value");
ABASE = U.arrayBaseOffset(Node[].class);
int scale = U.arrayIndexScale(Node[].class);
if ((scale & (scale - 1)) != 0)
throw new Error("array index scale not a power of two");
ASHIFT = 31 - Integer.numberOfLeadingZeros(scale);
// Reduce the risk of rare disastrous classloading in first call to
// LockSupport.park: https://bugs.openjdk.java.net/browse/JDK-8074773
Class<?> ensureLoaded = LockSupport.class;
}
< prev index next >