Proxy.isProxyClass scalability (original) (raw)

Peter Levart peter.levart at gmail.com
Fri Jan 25 16:34:26 UTC 2013


Hi David,

I was surprised to see Usafe report these offsets. See below:

java.lang.Class instance field offsets:

           Field Type                           Field Name Offset
           ---------- ---------- ------
          Constructor cachedConstructor     12
                Class newInstanceCallerCache     16
               String name     20
        SoftReference reflectionData     24
      ClassRepository genericInfo     28
             Object[] enumConstants     32
                  Map enumConstantDirectory     36
                  Map annotations     40
                  Map declaredAnnotations     44
       AnnotationType annotationType     48
        ClassValueMap classValueMap *52*

Why the 24 bytes gap between /classValueMap/ and /classRedefinedCount/ fields?

                  int classRedefinedCount *80*
                  int lastAnnotationsRedefinedCount     84

java.lang.String static field offsets:

           Field Type                           Field Name Offset
           ---------- ---------- ------
  ObjectStreamField[] serialPersistentFields     96
           Comparator CASE_INSENSITIVE_ORDER    100
                 long serialVersionUID    104
                  int HASHING_SEED    112

The 64 bit pointers variant:

java.lang.Class instance field offsets:

           Field Type                           Field Name Offset
           ---------- ---------- ------
          Constructor cachedConstructor     16
                Class newInstanceCallerCache     24
               String name     32
        SoftReference reflectionData     40
      ClassRepository genericInfo     48
             Object[] enumConstants     56
                  Map enumConstantDirectory     64
                  Map annotations     72
                  Map declaredAnnotations     80
       AnnotationType annotationType     88
        ClassValueMap classValueMap *96*

24 bytes gap here too!

                  int classRedefinedCount *128*
                  int lastAnnotationsRedefinedCount    132

java.lang.String static field offsets:

           Field Type                           Field Name Offset
           ---------- ---------- ------
  ObjectStreamField[] serialPersistentFields    144
           Comparator CASE_INSENSITIVE_ORDER    152
                 long serialVersionUID    160
                  int HASHING_SEED    168

Might it be that the "classRedefinedCount" field offset is fixed somehow in VM, since the VM has to update it? Should there be VM changes also to accomodate ReflectionData changes? Are there VM fields inserted here that don't have a Java mapping?

Regards, Peter



More information about the core-libs-dev mailing list