< prev index next >
src/java.base/share/classes/java/lang/Class.java
Print this page
rev 17358 : 8182487: Add Unsafe.objectFieldOffset(Class, String)
Reviewed-by: dsimms
*** 2861,2882 ****
private static final long annotationTypeOffset;
// offset of Class.annotationData instance field
private static final long annotationDataOffset;
static {
! Field[] fields = Class.class.getDeclaredFields0(false); // bypass caches
! reflectionDataOffset = objectFieldOffset(fields, "reflectionData");
! annotationTypeOffset = objectFieldOffset(fields, "annotationType");
! annotationDataOffset = objectFieldOffset(fields, "annotationData");
}
! private static long objectFieldOffset(Field[] fields, String fieldName) {
! Field field = searchFields(fields, fieldName);
! if (field == null) {
! throw new Error("No " + fieldName + " field found in java.lang.Class");
! }
! return unsafe.objectFieldOffset(field);
}
static <T> boolean casReflectionData(Class<?> clazz,
SoftReference<ReflectionData<T>> oldData,
SoftReference<ReflectionData<T>> newData) {
--- 2861,2877 ----
private static final long annotationTypeOffset;
// offset of Class.annotationData instance field
private static final long annotationDataOffset;
static {
! reflectionDataOffset = objectFieldOffset("reflectionData");
! annotationTypeOffset = objectFieldOffset("annotationType");
! annotationDataOffset = objectFieldOffset("annotationData");
}
! private static long objectFieldOffset(String fieldName) {
! return unsafe.objectFieldOffset(Class.class, fieldName);
}
static <T> boolean casReflectionData(Class<?> clazz,
SoftReference<ReflectionData<T>> oldData,
SoftReference<ReflectionData<T>> newData) {
< prev index next >