package org.sef4j.callstack.stats; import java.security.AccessController; import java.security.PrivilegedAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SuppressWarnings("restriction") public class UnsafeUtils { private static final Logger LOG = LoggerFactory.getLogger(UnsafeUtils.class); public static final sun.misc.Unsafe UNSAFE = getUnsafe(); // Cached array base offset public static final long ARRAY_BASE_OFFSET = UNSAFE.arrayBaseOffset(byte[].class);; public static sun.misc.Unsafe getUnsafe() { return AccessController.doPrivileged(new PrivilegedAction<sun.misc.Unsafe>() { public sun.misc.Unsafe run() { try { java.lang.reflect.Field singleoneInstanceField = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); singleoneInstanceField.setAccessible(true); sun.misc.Unsafe ret = (sun.misc.Unsafe)singleoneInstanceField.get(null); return ret; } catch (Throwable e) { LOG.error("Could not instanciate sun.miscUnsafe. should use java.nio DirectByteBuffer ?",e); return null; } } }); } }