Class UnsafeWrapper


  • public class UnsafeWrapper
    extends java.lang.Object
    A wrapper around sun.misc.Unsafe for handling atomic operations, copies from fields to arrays and vice versa. We avoid using sun.misc.Unsafe directly using reflection, mostly just to avoid getting 'unsafe' compiler errors. This might need to be changed if we start to see performance issues.
    • Constructor Summary

      Constructors 
      Constructor Description
      UnsafeWrapper()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static int arrayBaseOffset​(java.lang.Class<?> _arrayClass)  
      static int arrayIndexScale​(java.lang.Class<?> _arrayClass)  
      static int atomicAdd​(int[] _arr, int _index, int _delta)  
      static boolean getBoolean​(java.lang.Object _object, long _offset)  
      static byte getByte​(java.lang.Object _object, long _offset)  
      static float getFloat​(java.lang.Object _object, long _offset)  
      static int getInt​(java.lang.Object _object, long _offset)  
      static long getLong​(java.lang.Object _object, long _offset)  
      static java.lang.Object getObject​(java.lang.Object _object, long _offset)  
      static long objectFieldOffset​(java.lang.reflect.Field _field)  
      static void putBoolean​(java.lang.Object _object, long _offset, boolean _boolean)  
      static void putByte​(java.lang.Object _object, long _offset, byte _byte)  
      static void putDouble​(java.lang.Object _object, long _offset, double _double)  
      static void putFloat​(java.lang.Object _object, long _offset, float _float)  
      static void putInt​(java.lang.Object _object, long _offset, int _int)  
      static void putLong​(java.lang.Object _object, long _offset, long _long)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • unsafe

        private static java.lang.Object unsafe
      • getIntVolatileMethod

        private static java.lang.reflect.Method getIntVolatileMethod
      • arrayBaseOffsetMethod

        private static java.lang.reflect.Method arrayBaseOffsetMethod
      • arrayIndexScaleMethod

        private static java.lang.reflect.Method arrayIndexScaleMethod
      • getObjectMethod

        private static java.lang.reflect.Method getObjectMethod
      • getIntMethod

        private static java.lang.reflect.Method getIntMethod
      • getFloatMethod

        private static java.lang.reflect.Method getFloatMethod
      • getByteMethod

        private static java.lang.reflect.Method getByteMethod
      • getBooleanMethod

        private static java.lang.reflect.Method getBooleanMethod
      • getLongMethod

        private static java.lang.reflect.Method getLongMethod
      • objectFieldOffsetMethod

        private static java.lang.reflect.Method objectFieldOffsetMethod
      • putBooleanMethod

        private static java.lang.reflect.Method putBooleanMethod
      • putIntMethod

        private static java.lang.reflect.Method putIntMethod
      • putFloatMethod

        private static java.lang.reflect.Method putFloatMethod
      • putDoubleMethod

        private static java.lang.reflect.Method putDoubleMethod
      • putByteMethod

        private static java.lang.reflect.Method putByteMethod
      • putLongMethod

        private static java.lang.reflect.Method putLongMethod
      • compareAndSwapIntMethod

        private static java.lang.reflect.Method compareAndSwapIntMethod
      • intArrayBase

        private static int intArrayBase
      • intArrayScale

        private static int intArrayScale
    • Constructor Detail

      • UnsafeWrapper

        public UnsafeWrapper()
    • Method Detail

      • atomicAdd

        public static int atomicAdd​(int[] _arr,
                                    int _index,
                                    int _delta)
      • arrayBaseOffset

        public static int arrayBaseOffset​(java.lang.Class<?> _arrayClass)
      • arrayIndexScale

        public static int arrayIndexScale​(java.lang.Class<?> _arrayClass)
      • getObject

        public static java.lang.Object getObject​(java.lang.Object _object,
                                                 long _offset)
      • getInt

        public static int getInt​(java.lang.Object _object,
                                 long _offset)
      • getFloat

        public static float getFloat​(java.lang.Object _object,
                                     long _offset)
      • getByte

        public static byte getByte​(java.lang.Object _object,
                                   long _offset)
      • getBoolean

        public static boolean getBoolean​(java.lang.Object _object,
                                         long _offset)
      • getLong

        public static long getLong​(java.lang.Object _object,
                                   long _offset)
      • putBoolean

        public static void putBoolean​(java.lang.Object _object,
                                      long _offset,
                                      boolean _boolean)
      • putFloat

        public static void putFloat​(java.lang.Object _object,
                                    long _offset,
                                    float _float)
      • putInt

        public static void putInt​(java.lang.Object _object,
                                  long _offset,
                                  int _int)
      • putDouble

        public static void putDouble​(java.lang.Object _object,
                                     long _offset,
                                     double _double)
      • putByte

        public static void putByte​(java.lang.Object _object,
                                   long _offset,
                                   byte _byte)
      • putLong

        public static void putLong​(java.lang.Object _object,
                                   long _offset,
                                   long _long)
      • objectFieldOffset

        public static long objectFieldOffset​(java.lang.reflect.Field _field)