On Jun 10, 2013, at 7:20 PM, Aleksey Shipilev <aleksey.shipi...@oracle.com> wrote:
> Thanks for taking a look, Paul! > Can I count your review as official? Unfortunately i am not an unofficial reviewer so can only be counted in the unofficial category for now :-( > > On 06/10/2013 08:44 PM, Paul Sandoz wrote: >>> - reuse ReflectionData to cache the interfaces and generic signatures >> >> Any guess on the size impact due to those new fields in ReflectionData? > > Seems to be additional 16 bytes (boolean+oop+oop+alignment, see below); > again, since the ReflectionData is lazily-constructed, this is not the > issue for most of the classes. > In EE-land a lot more reflection tends to happen on application classes. I see Peter has some ideas to avoid additional fields with a special lazilly initialized ClassRepository instance. Paul. > ---- Before: > > Running 64-bit HotSpot VM. > Using compressed references with 3-bit shift. > Objects are 8 bytes aligned. > > java.lang.Class.ReflectionData > offset size type description > 0 12 (assumed to be the object header) > 12 4 int ReflectionData.redefinedCount > 16 4 Field[] ReflectionData.declaredFields > 20 4 Field[] ReflectionData.publicFields > 24 4 Method[] ReflectionData.declaredMethods > 28 4 Method[] ReflectionData.publicMethods > 32 4 Constructor[] ReflectionData.declaredConstructors > 36 4 Constructor[] ReflectionData.publicConstructors > 40 4 Field[] ReflectionData.declaredPublicFields > 44 4 Method[] ReflectionData.declaredPublicMethods > 48 (object boundary, size estimate) > > ---- After: > > Running 64-bit HotSpot VM. > Using compressed references with 3-bit shift. > Objects are 16 bytes aligned. > > java.lang.Class.ReflectionData > offset size type description > 0 12 (assumed to be the object header) > 12 4 int ReflectionData.redefinedCount > 16 1 boolean ReflectionData.genericSignatureResolved > 17 3 (alignment/padding gap) > 20 4 Field[] ReflectionData.declaredFields > 24 4 Field[] ReflectionData.publicFields > 28 4 Method[] ReflectionData.declaredMethods > 32 4 Method[] ReflectionData.publicMethods > 36 4 Constructor[] ReflectionData.declaredConstructors > 40 4 Constructor[] ReflectionData.publicConstructors > 44 4 Field[] ReflectionData.declaredPublicFields > 48 4 Method[] ReflectionData.declaredPublicMethods > 52 4 Class[] ReflectionData.interfaces > 56 4 String ReflectionData.genericSignature > 60 4 (loss due to the next object alignment) > 64 (object boundary, size estimate) >