Proxy.isProxyClass scalability
Peter Levart
peter.levart at gmail.com
Fri Jan 25 17:12:16 UTC 2013
On 01/25/2013 05:42 PM, Aleksey Shipilev wrote:
> On 01/25/2013 08:37 PM, Peter Levart wrote:
>> On 01/25/2013 05:34 PM, Aleksey Shipilev wrote:
>>> 80 4 ClassValueMap Class.classValueMap
>>> 84 12 (alignment/padding gap)
>> What's this? why 12 bytes?
>>> 96 4 int Class.classRedefinedCount
> Beats me, some voodoo VM magic? This is what Unsafe reports anyway. Your
> data have the same gap (though not immediately evident because you don't
> calculate the offset differences).
>
> -Aleksey.
j.l.Class seems to be very special with it's own layout lo(ma)gic. For
example, I copied the source of j.l.Class into j.l.MyClass and
chopped-out all the methods, which gives the following (32 bit pointers):
java.lang.MyClass instance field offsets:
Field Type Field Name Offset
---------- ---------- ------
* int classRedefinedCount 12**
** int lastAnnotationsRedefinedCount 16*
Constructor cachedConstructor 20
Class newInstanceCallerCache 24
String name 28
SoftReference reflectionData 32
ClassRepository genericInfo 36
Object[] enumConstants 40
Map enumConstantDirectory 44
Map annotations 48
Map declaredAnnotations 52
AnnotationType annotationType 56
ClassValueMap classValueMap 60
the primitive fields come before pointers whereas in j.l.Class:
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
* int classRedefinedCount 80**
** int lastAnnotationsRedefinedCount 84*
...they come after the pointers and the first one has a strange alignment...
Regards, Peter
More information about the core-libs-dev
mailing list