hotspot/test/runtime/Unsafe/FieldOffset.java
changeset 28951 a29d2048e16a
parent 28732 d4b650e48a8f
child 29678 dd2f3932c21e
equal deleted inserted replaced
28949:c6f50d62ecef 28951:a29d2048e16a
    35 import static com.oracle.java.testlibrary.Asserts.*;
    35 import static com.oracle.java.testlibrary.Asserts.*;
    36 
    36 
    37 public class FieldOffset {
    37 public class FieldOffset {
    38     public static void main(String args[]) throws Exception {
    38     public static void main(String args[]) throws Exception {
    39         Unsafe unsafe = Utils.getUnsafe();
    39         Unsafe unsafe = Utils.getUnsafe();
    40         Field fields[] = Test.class.getDeclaredFields();
    40         Field[] fields = Test.class.getDeclaredFields();
    41 
    41 
    42         for (int i = 0; i < fields.length; i++) {
    42         for (int i = 0; i < fields.length; i++) {
    43             int offset = unsafe.fieldOffset(fields[i]);
    43             long offset = unsafe.objectFieldOffset(fields[i]);
    44             // Ensure we got a valid offset value back
    44             // Ensure we got a valid offset value back
    45             assertNotEquals(offset, unsafe.INVALID_FIELD_OFFSET);
    45             assertNotEquals(offset, unsafe.INVALID_FIELD_OFFSET);
    46 
    46 
    47             // Make sure the field offset is unique
    47             // Make sure the field offset is unique
    48             for (int j = 0; j < i; j++) {
    48             for (int j = 0; j < i; j++) {
    49                 assertNotEquals(offset, unsafe.fieldOffset(fields[j]));
    49                 assertNotEquals(offset, unsafe.objectFieldOffset(fields[j]));
    50             }
    50             }
    51         }
    51         }
       
    52 
       
    53         fields = StaticTest.class.getDeclaredFields();
       
    54         for (int i = 0; i < fields.length; i++) {
       
    55             long offset = unsafe.staticFieldOffset(fields[i]);
       
    56             // Ensure we got a valid offset value back
       
    57             assertNotEquals(offset, unsafe.INVALID_FIELD_OFFSET);
       
    58 
       
    59             // Make sure the field offset is unique
       
    60             for (int j = 0; j < i; j++) {
       
    61                 assertNotEquals(offset, unsafe.staticFieldOffset(fields[j]));
       
    62             }
       
    63         }
       
    64 
    52     }
    65     }
    53 
    66 
    54     class Test {
    67     class Test {
    55         boolean booleanField;
    68         boolean booleanField;
    56         byte byteField;
    69         byte byteField;
    60         int intField;
    73         int intField;
    61         long longField;
    74         long longField;
    62         Object objectField;
    75         Object objectField;
    63         short shortField;
    76         short shortField;
    64     }
    77     }
       
    78 
       
    79     static class StaticTest {
       
    80         static boolean booleanField;
       
    81         static byte byteField;
       
    82         static char charField;
       
    83         static double doubleField;
       
    84         static float floatField;
       
    85         static int intField;
       
    86         static long longField;
       
    87         static Object objectField;
       
    88         static short shortField;
       
    89     }
       
    90 
    65 }
    91 }