Class UnsafeAccess

java.lang.Object
rx.internal.util.unsafe.UnsafeAccess

@SuppressAnimalSniffer public final class UnsafeAccess extends Object
All use of this class MUST first check that UnsafeAccess.isUnsafeAvailable() == true otherwise NPEs will happen in environments without "suc.misc.Unsafe" such as Android.

Note that you can force RxJava to not use Unsafe API by setting any value to System Property rx.unsafe-disable.

  • Field Details

    • UNSAFE

      public static final sun.misc.Unsafe UNSAFE
    • DISABLED_BY_USER

      private static final boolean DISABLED_BY_USER
  • Constructor Details

    • UnsafeAccess

      private UnsafeAccess()
  • Method Details

    • isUnsafeAvailable

      public static boolean isUnsafeAvailable()
    • getAndIncrementInt

      public static int getAndIncrementInt(Object obj, long offset)
    • getAndAddInt

      public static int getAndAddInt(Object obj, long offset, int n)
    • getAndSetInt

      public static int getAndSetInt(Object obj, long offset, int newValue)
    • compareAndSwapInt

      public static boolean compareAndSwapInt(Object obj, long offset, int expected, int newValue)
    • addressOf

      public static long addressOf(Class<?> clazz, String fieldName)
      Returns the address of the specific field on the class and wraps a NoSuchFieldException into an internal error.

      One can avoid using static initializers this way and just assign the address directly to the target static field.

      Parameters:
      clazz - the target class
      fieldName - the target field name
      Returns:
      the address (offset) of the field