Proxy.isProxyClass scalability (original) (raw)
Peter Levart peter.levart at gmail.com
Fri Jan 25 16:02:01 UTC 2013
- Previous message: Proxy.isProxyClass scalability
- Next message: Proxy.isProxyClass scalability
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 01/25/2013 06:35 AM, David Holmes wrote:
On 25/01/2013 2:36 AM, Peter Levart wrote:
On 01/24/2013 04:45 PM, Peter Levart wrote:
Is there really no existing alignment gap in j.l.Class layout that a boolean can slide into? There might be, I will check. All instance fields in j.l.Class are either references or ints. Instance are also 8-byte aligned though so does that leave any slop where an extra field would not make an actual difference. (I should know the answer to that after the ReflectionData changes but don't recall.) Note: I have not looked at this, just considering the "add a field" aspect of it. David
Here's what the Unsafe reports about current layout of j.l.Class (ReflectionData changes already taken into account):
32 bit pointers:
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
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
64 bit pointers:
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
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
If I add a boolean instance field "isProxy" to j.l.Class the report changes to:
32 bit pointers:
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
boolean isProxy 96
java.lang.String static field offsets:
Field Type Field Name Offset
---------- ---------- ------
ObjectStreamField[] serialPersistentFields 104
Comparator CASE_INSENSITIVE_ORDER 108
long serialVersionUID 112
int HASHING_SEED 120
64 bit pointers:
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
int classRedefinedCount 128
int lastAnnotationsRedefinedCount 132
boolean isProxy 144
java.lang.String static field offsets:
Field Type Field Name Offset
---------- ---------- ------
ObjectStreamField[] serialPersistentFields 152
Comparator CASE_INSENSITIVE_ORDER 160
long serialVersionUID 168
int HASHING_SEED 176
...so it seems that in both cases, adding a boolean to j.l.Class wastes 8 bytes per Class object :-(
Regards, Peter
- Previous message: Proxy.isProxyClass scalability
- Next message: Proxy.isProxyClass scalability
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]