import sun.misc.Unsafe;
import java.lang.reflect.Field;

public class UnsafeGetInt {

    private static final int ITERATIONS = 100_000_000;
    private static final int SIZE_IN_BYTES = 4;

    public static void main(String[] args) throws Exception {
        int value = 123;

        Field f = Unsafe.class.getDeclaredField("theUnsafe");
        f.setAccessible(true);
        Unsafe unsafe = (Unsafe) f.get(null);

        long baseAddress = unsafe.allocateMemory(SIZE_IN_BYTES);
        unsafe.putInt(baseAddress, value);

        long start = System.nanoTime();

        for (int i = 0; i < ITERATIONS; i++) {
            unsafe.getInt(baseAddress);
        }

        long end = System.nanoTime();
        unsafe.freeMemory(baseAddress);

        System.out.println("Unsafe.getInt() time: " + String.format("%.3f", (end - start) / 1_000_000.0f) + "ms");
    }
}

