< prev index next >

src/java.base/share/classes/jdk/internal/misc/Unsafe.java

Print this page
rev 17358 : 8182487: Add Unsafe.objectFieldOffset(Class, String)
Reviewed-by: dsimms

*** 952,961 **** --- 952,980 ---- return objectFieldOffset0(f); } /** + * Reports the location of the field with a given name in the storage + * allocation of its class. + * + * @throws NullPointerException if any parameter is {@code null}. + * @throws InternalError if there is no field named {@code name} declared + * in class {@code c}, i.e., if {@code c.getDeclaredField(name)} + * would throw {@code java.lang.NoSuchFieldException}. + * + * @see #objectFieldOffset(Field) + */ + public long objectFieldOffset(Class<?> c, String name) { + if (c == null || name == null) { + throw new NullPointerException(); + } + + return objectFieldOffset1(c, name); + } + + /** * Reports the location of a given static field, in conjunction with {@link * #staticFieldBase}. * <p>Do not expect to perform any sort of arithmetic on this offset; * it is just a cookie which is passed to the unsafe heap memory accessors. *
*** 3683,3692 **** --- 3702,3712 ---- private native void setMemory0(Object o, long offset, long bytes, byte value); @HotSpotIntrinsicCandidate private native void copyMemory0(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes); private native void copySwapMemory0(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes, long elemSize); private native long objectFieldOffset0(Field f); + private native long objectFieldOffset1(Class<?> c, String name); private native long staticFieldOffset0(Field f); private native Object staticFieldBase0(Field f); private native boolean shouldBeInitialized0(Class<?> c); private native void ensureClassInitialized0(Class<?> c); private native int arrayBaseOffset0(Class<?> arrayClass);
< prev index next >