RFR: Report fwdptr size in JNI GetObjectSize

Roman Kennke rkennke at redhat.com
Mon Dec 11 17:14:41 UTC 2017


Am 11.12.2017 um 18:12 schrieb Aleksey Shipilev:
> http://cr.openjdk.java.net/~shade/shenandoah/objsize-fwdptr/webrev.01/
> 
> To make cross-GC comparisons more convenient, it makes sense to let Shenandoah report JNI
> GetObjectSize added up with forwarding pointer. This seems innocuous, because it is specified to
> return implementation-specific value ("This size is an implementation-specific approximation of the
> amount of storage consumed by this object"), and it does not touch "actual" oopDesc::size() which is
> used everywhere else in critical VM code.
> 
> Testing: hotspot_gc_shenandoah, eyeballing JOL output for different GCs
> 
> # -XX:+UseParallelGC
> 
> java.lang.String object internals:
>   OFFSET  SIZE     TYPE DESCRIPTION                               VALUE
>        0     4          (object header)                           05 00 00 00
>        4     4          (object header)                           00 00 00 00
>        8     4          (object header)                           18 16 00 00
>       12     4   byte[] String.value                              []
>       16     4      int String.hash                               0
>       20     1     byte String.coder                              0
>       21     3          (loss due to the next object alignment)
> Instance size: 24 bytes
> Space losses: 0 bytes internal + 3 bytes external = 3 bytes total
> 
> # -XX:+UseShenandoahGC
> 
> java.lang.String object internals:
>   OFFSET  SIZE     TYPE DESCRIPTION                               VALUE
>        0     4          (object header)                           05 00 00 00
>        4     4          (object header)                           00 00 00 00
>        8     4          (object header)                           18 16 00 00
>       12     4   byte[] String.value                              []
>       16     4      int String.hash                               0
>       20     1     byte String.coder                              0
>       21    11          (loss due to the next object alignment)
> Instance size: 32 bytes
> Space losses: 0 bytes internal + 11 bytes external = 11 bytes total
> 
> 
> Thanks,
> -Aleksey
> 

Yes that sounds reasonable.

Roman


More information about the shenandoah-dev mailing list