3217 |
|
return true; |
3218 |
|
} |
3219 |
|
|
3220 |
< |
private static final sun.misc.Unsafe U; |
3220 |
> |
private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe(); |
3221 |
|
private static final long LOCKSTATE; |
3222 |
|
static { |
3223 |
|
try { |
3224 |
– |
U = sun.misc.Unsafe.getUnsafe(); |
3225 |
– |
Class<?> k = TreeBin.class; |
3224 |
|
LOCKSTATE = U.objectFieldOffset |
3225 |
< |
(k.getDeclaredField("lockState")); |
3225 |
> |
(TreeBin.class.getDeclaredField("lockState")); |
3226 |
|
} catch (ReflectiveOperationException e) { |
3227 |
|
throw new Error(e); |
3228 |
|
} |
6250 |
|
} |
6251 |
|
|
6252 |
|
// Unsafe mechanics |
6253 |
< |
private static final sun.misc.Unsafe U; |
6253 |
> |
private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe(); |
6254 |
|
private static final long SIZECTL; |
6255 |
|
private static final long TRANSFERINDEX; |
6256 |
|
private static final long BASECOUNT; |
6257 |
|
private static final long CELLSBUSY; |
6258 |
|
private static final long CELLVALUE; |
6259 |
< |
private static final long ABASE; |
6259 |
> |
private static final int ABASE; |
6260 |
|
private static final int ASHIFT; |
6261 |
|
|
6262 |
|
static { |
6263 |
|
try { |
6266 |
– |
U = sun.misc.Unsafe.getUnsafe(); |
6267 |
– |
Class<?> k = ConcurrentHashMap.class; |
6264 |
|
SIZECTL = U.objectFieldOffset |
6265 |
< |
(k.getDeclaredField("sizeCtl")); |
6265 |
> |
(ConcurrentHashMap.class.getDeclaredField("sizeCtl")); |
6266 |
|
TRANSFERINDEX = U.objectFieldOffset |
6267 |
< |
(k.getDeclaredField("transferIndex")); |
6267 |
> |
(ConcurrentHashMap.class.getDeclaredField("transferIndex")); |
6268 |
|
BASECOUNT = U.objectFieldOffset |
6269 |
< |
(k.getDeclaredField("baseCount")); |
6269 |
> |
(ConcurrentHashMap.class.getDeclaredField("baseCount")); |
6270 |
|
CELLSBUSY = U.objectFieldOffset |
6271 |
< |
(k.getDeclaredField("cellsBusy")); |
6272 |
< |
Class<?> ck = CounterCell.class; |
6271 |
> |
(ConcurrentHashMap.class.getDeclaredField("cellsBusy")); |
6272 |
> |
|
6273 |
|
CELLVALUE = U.objectFieldOffset |
6274 |
< |
(ck.getDeclaredField("value")); |
6275 |
< |
Class<?> ak = Node[].class; |
6276 |
< |
ABASE = U.arrayBaseOffset(ak); |
6277 |
< |
int scale = U.arrayIndexScale(ak); |
6274 |
> |
(CounterCell.class.getDeclaredField("value")); |
6275 |
> |
|
6276 |
> |
ABASE = U.arrayBaseOffset(Node[].class); |
6277 |
> |
int scale = U.arrayIndexScale(Node[].class); |
6278 |
|
if ((scale & (scale - 1)) != 0) |
6279 |
|
throw new Error("array index scale not a power of two"); |
6280 |
|
ASHIFT = 31 - Integer.numberOfLeadingZeros(scale); |