Proxy.isProxyClass scalability (original) (raw)
Peter Levart peter.levart at gmail.com
Fri Jan 25 17:32:34 UTC 2013
- Previous message: Proxy.isProxyClass scalability
- Next message: Proxy.isProxyClass scalability
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi David,
I think I already have a kind of answer. You wrote it in "RFR: 8005232 (JEP-149) Class Instance size reduction":
On 01/06/2013 11:46 PM, David Holmes wrote:
In Java 8, using a 32-bit example, a java.lang.Class instance is 112 bytes consisting of:
- 8 byte object header - 20 declared fields (mostly references, some int) *- 5 injected fields (3 references, 2 ints) * That gives: 8 + (204) +(54) = 108 bytes. But as we need 8-byte alignment that increases to 112 bytes.
Regards, Peter
On 01/25/2013 05:34 PM, Peter Levart wrote:
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 CASEINSENSITIVEORDER 100 long serialVersionUID 104 int HASHINGSEED 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 CASEINSENSITIVEORDER 152 long serialVersionUID 160 int HASHINGSEED 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
- Previous message: Proxy.isProxyClass scalability
- Next message: Proxy.isProxyClass scalability
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]