[9] RFR (XXS): 8058309: Unsafe.defineAnonymousClass deoptimization checks scale devastatingly poorly

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Wed Sep 17 15:02:40 UTC 2014


http://cr.openjdk.java.net/~vlivanov/8058309/webrev.00/
https://bugs.openjdk.java.net/browse/JDK-8058309

j.l.i.LambdaForm class has ~50-100 dependent nmethods on average. For 
every compiled LF, Unsafe.defineAnonymousClass() should validate all 
dependencies on parent class. Since thousands of LFs are compiled, VM 
wastes considerable amount of time re-validating dependencies. Most of 
the dependencies on j.l.i.LambdaForm are of type unique_concrete_method 
and can't be invalidated with the code generated for LFs.

The fix is to decouple compiled LambdaForms and j.l.i.LambdaForm class 
and use j.l.Object as a parent class instead. Since LambdaForm is 
already used as a host class, all access checks pass.

Reviewed-by: vlivanov, jrose, ?
Contributed-by: aleksey.shipilev at oracle.com

Testing: jck (api/java_lang/invoke), jdk/java/lang/invoke, 
jdk/java/util/streams w/ "-ea -esa" and COMPILE_THRESHOLD={0,30},

Aleksey refers to performance analysis in the bug [1].

Thanks!

Best regards,
Vladimir Ivanov

[1] http://cr.openjdk.java.net/~shade/8058309/usdacdependency.txt


More information about the mlvm-dev mailing list