-
Enhancement
-
Resolution: Fixed
-
P4
-
9
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8149282 | 8u101 | Robert Mckenna | P4 | Resolved | Fixed | b01 |
JDK-8144719 | 8u92 | Robert Mckenna | P4 | Resolved | Fixed | b01 |
JDK-8155427 | emb-8u101 | Robert Mckenna | P4 | Resolved | Fixed | b01 |
JDK-8175474 | openjdk7u | Robert Mckenna | P4 | Resolved | Fixed | master |
There is an anecdotal evidence that replacing direct class checks with Class.isInstance helps when "obj" has subclasses, and "obj.getClass() != tclass" could not be optimized. fullCheck() does Class.isInstance anyway, so it seems functionally correct to use it in the "quick" checks.
public final int get(T obj) {
if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
return U.getIntVolatile(obj, offset);
}
private void fullCheck(T obj) {
if (!tclass.isInstance(obj))
throw new ClassCastException();
if (cclass != null)
ensureProtectedAccess(obj);
}
This should be checked afterJDK-8140483 lands. C1 and C2 may disagree which pattern is faster.
public final int get(T obj) {
if (obj == null || obj.getClass() != tclass || cclass != null) fullCheck(obj);
return U.getIntVolatile(obj, offset);
}
private void fullCheck(T obj) {
if (!tclass.isInstance(obj))
throw new ClassCastException();
if (cclass != null)
ensureProtectedAccess(obj);
}
This should be checked after
- backported by
-
JDK-8144719 Atomic*FieldUpdaters should use Class.isInstance instead of direct class check
-
- Resolved
-
-
JDK-8149282 Atomic*FieldUpdaters should use Class.isInstance instead of direct class check
-
- Resolved
-
-
JDK-8155427 Atomic*FieldUpdaters should use Class.isInstance instead of direct class check
-
- Resolved
-
-
JDK-8175474 Atomic*FieldUpdaters should use Class.isInstance instead of direct class check
-
- Resolved
-
- relates to
-
JDK-8140483 Atomic*FieldUpdaters final fields should be trusted
-
- Resolved
-