RFR (M): [JVMCI] VM warning: Performance bug: SystemDictionary lookup_count=21831450 lookup_length=1275207287 average=58.411479 load=5.572844
Ioi Lam
ioi.lam at oracle.com
Tue Jul 12 13:29:06 UTC 2016
Hi Gerard,
The changes look good. A small nit here:
826 tty->print("%4d: hits %5.2f%c", ...., '%');
This should be changed to
826 tty->print("%4d: hits %5.2f%%", ...);
Also in hashtable.hpp:
129 long _hits;
Is there any reason to not use 'int'? _lookup_count is an 'int'.
Also, the terminology used by the VM is -- we have 1009 'buckets', and
each bucket contains zero or more 'entries' in a link list.
So the help message should be something like:
1st number: the bucket index
2nd number: the entry's index within this bucket
3rd number: the hit percentage of this entry
4th number: the hash index of this entry
Thanks
- Ioi
On 7/11/16 10:25 AM, Gerard Ziemski wrote:
> hi all,
>
> Please review this rather simple fix, which will print more info about SystemDictionary, so that we can hopefully draw some conclusion the next time we hit the “VM warning: Performance bug: SystemDictionary…” warning.
>
> Currently all we print is just the warning's 1st line below, but with this fix we show the following:
>
> -----------------------------
> Java HotSpot(TM) 64-Bit Server VM warning: Performance bug: SystemDictionary lookup_count=6752 lookup_length=1010 average=0.149585 load=0.479683
> Java system dictionary (table_size=1009, classes=484)
> ^ indicates that initiating loader is different from defining loader
> 1st number shows bucket index
> 2nd number shows chain index within a bucket
> 3rd number shows hit percentage of the bucket
> 4th number shows hash index
> 0:
> 1:
> 2:
> 3: 0: 0.20%: 1763306205: jdk.internal.module.ModuleHashes, loader NULL class_loader
> 3: 1: 0.20%: 1886526294: sun.nio.fs.UnixFileStoreAttributes, loader NULL class_loader
> 3: 2: 0.20%: 220125461: java.lang.reflect.ReflectAccess, loader NULL class_loader
> 4: 0: 0.08%: 915402137: jdk.internal.loader.BuiltinClassLoader$LoadedModule, loader NULL class_loader
> 5:
> .
> .
> .
> 1003:
> 1004: 0: 0.08%: 688417488: jdk.internal.reflect.ConstructorAccessor, loader NULL class_loader
> 1005:
> 1006:
> 1007: 0: 0.08%: 400327811: java.lang.InterruptedException, loader NULL class_loader
> 1008: 0: 0.11%: 1113735208: java.util.concurrent.atomic.AtomicBoolean, loader NULL class_loader
>
> Top 16 buckets:
> 546: hits 2.76%
> 183: hits 0.87%
> 969: hits 2.37%s
> 281: hits 0.95%
> 957: hits 1.73%
> 571: hits 16.67%
> 221: hits 0.98%
> 505: hits 0.84%
> 727: hits 1.28%
> 414: hits 1.73%
> 569: hits 4.89%
> 245: hits 0.89%
> 253: hits 1.34%
> 135: hits 0.95%
> 457: hits 0.87%
> 348: hits 1.23%
>
> Protection domain cache table (table_size=2017, classes=1)
> entry 0x00007fe525019c20 value 0x00000006cfe147a8 strongly_reachable 0 next 0x0000000000000000
> -----------------------------
>
> We now show the bucket index, the chain index (item index within the bucket), the hit ratio (successful lookup / all successful lookups) and hash code for verification.
>
> In the end, I believe that the way to actually fix this issue will be to increase the SystemDictionary size, but the warning will be now accompanied by more pertinent details, which should make it more useful on its own.
>
> open webrev: http://cr.openjdk.java.net/~gziemski/8138760_rev1
> bug id: https://bugs.openjdk.java.net/browse/JDK-8138760
>
> Passes JPRT hotspot.
>
>
> cheers
>
More information about the hotspot-runtime-dev
mailing list