2323
2424public final class PlatformDependent {
2525
26- public static final Unsafe UNSAFE ;
26+ /**
27+ * Facade in front of {@link sun.misc.Unsafe}, used to avoid directly exposing Unsafe outside of
28+ * this package. This also lets us aovid accidental use of deprecated methods or methods that
29+ * aren't present in Java 6.
30+ */
31+ public static final class UNSAFE {
32+
33+ private UNSAFE () { }
34+
35+ public static int getInt (Object object , long offset ) {
36+ return _UNSAFE .getInt (object , offset );
37+ }
38+
39+ public static void putInt (Object object , long offset , int value ) {
40+ _UNSAFE .putInt (object , offset , value );
41+ }
42+
43+ public static boolean getBoolean (Object object , long offset ) {
44+ return _UNSAFE .getBoolean (object , offset );
45+ }
46+
47+ public static void putBoolean (Object object , long offset , boolean value ) {
48+ _UNSAFE .putBoolean (object , offset , value );
49+ }
50+
51+ public static byte getByte (Object object , long offset ) {
52+ return _UNSAFE .getByte (object , offset );
53+ }
54+
55+ public static void putByte (Object object , long offset , byte value ) {
56+ _UNSAFE .putByte (object , offset , value );
57+ }
58+
59+ public static short getShort (Object object , long offset ) {
60+ return _UNSAFE .getShort (object , offset );
61+ }
62+
63+ public static void putShort (Object object , long offset , short value ) {
64+ _UNSAFE .putShort (object , offset , value );
65+ }
66+
67+ public static long getLong (Object object , long offset ) {
68+ return _UNSAFE .getLong (object , offset );
69+ }
70+
71+ public static void putLong (Object object , long offset , long value ) {
72+ _UNSAFE .putLong (object , offset , value );
73+ }
74+
75+ public static float getFloat (Object object , long offset ) {
76+ return _UNSAFE .getFloat (object , offset );
77+ }
78+
79+ public static void putFloat (Object object , long offset , float value ) {
80+ _UNSAFE .putFloat (object , offset , value );
81+ }
82+
83+ public static double getDouble (Object object , long offset ) {
84+ return _UNSAFE .getDouble (object , offset );
85+ }
86+
87+ public static void putDouble (Object object , long offset , double value ) {
88+ _UNSAFE .putDouble (object , offset , value );
89+ }
90+
91+ public static long allocateMemory (long size ) {
92+ return _UNSAFE .allocateMemory (size );
93+ }
94+
95+ public static void freeMemory (long address ) {
96+ _UNSAFE .freeMemory (address );
97+ }
98+
99+ }
100+
101+ private static final Unsafe _UNSAFE ;
27102
28103 public static final int BYTE_ARRAY_OFFSET ;
29104
@@ -48,13 +123,13 @@ public final class PlatformDependent {
48123 } catch (Throwable cause ) {
49124 unsafe = null ;
50125 }
51- UNSAFE = unsafe ;
126+ _UNSAFE = unsafe ;
52127
53- if (UNSAFE != null ) {
54- BYTE_ARRAY_OFFSET = UNSAFE .arrayBaseOffset (byte [].class );
55- INT_ARRAY_OFFSET = UNSAFE .arrayBaseOffset (int [].class );
56- LONG_ARRAY_OFFSET = UNSAFE .arrayBaseOffset (long [].class );
57- DOUBLE_ARRAY_OFFSET = UNSAFE .arrayBaseOffset (double [].class );
128+ if (_UNSAFE != null ) {
129+ BYTE_ARRAY_OFFSET = _UNSAFE .arrayBaseOffset (byte [].class );
130+ INT_ARRAY_OFFSET = _UNSAFE .arrayBaseOffset (int [].class );
131+ LONG_ARRAY_OFFSET = _UNSAFE .arrayBaseOffset (long [].class );
132+ DOUBLE_ARRAY_OFFSET = _UNSAFE .arrayBaseOffset (double [].class );
58133 } else {
59134 BYTE_ARRAY_OFFSET = 0 ;
60135 INT_ARRAY_OFFSET = 0 ;
@@ -71,7 +146,7 @@ static public void copyMemory(
71146 long length ) {
72147 while (length > 0 ) {
73148 long size = Math .min (length , UNSAFE_COPY_THRESHOLD );
74- UNSAFE .copyMemory (src , srcOffset , dst , dstOffset , size );
149+ _UNSAFE .copyMemory (src , srcOffset , dst , dstOffset , size );
75150 length -= size ;
76151 srcOffset += size ;
77152 dstOffset += size ;
@@ -82,6 +157,6 @@ static public void copyMemory(
82157 * Raises an exception bypassing compiler checks for checked exceptions.
83158 */
84159 public static void throwException (Throwable t ) {
85- UNSAFE .throwException (t );
160+ _UNSAFE .throwException (t );
86161 }
87162}
0 commit comments