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