[9] RFR (M): 8069591: Customize LambdaForms which are invoked using MH.invoke/invokeExact

Remi Forax forax at univ-mlv.fr
Wed Jan 21 17:31:05 UTC 2015


Hi Vladimir,
in Invokers.java, I think that checkCustomized should take an Object and 
not a MethodHandle
exactly like getCallSiteTarget takes an Object and not a CallSite.

in MethodHandle.java, customizationCount is declared as a byte and there 
is no check that
the CUSTOMIZE_THRESHOLD is not greater than 127.

cheers,
Rémi

On 01/21/2015 05:25 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8069591/webrev.00/
> https://bugs.openjdk.java.net/browse/JDK-8069591
>
> Overhead of non-inlined MH.invoke/invokeExact calls significantly 
> increased with LambdaForm sharing. The cause is JIT compiler can't 
> produce a single nmethod for the whole MethodHandle chain, so the 
> execution is spread around numerous nmethods (1 per each MethodHandle 
> in the chain). The longer the chain the larger overhead.
>
> The fix is to customize LambdaForms (create a dedicated LambdaForm for 
> a MethodHandle). Per-MethodHandle count is introduced, which is 
> incremented every time a MethodHandle is invoked using 
> MethodHandle.invoke/invokeExact. Once CUSTOMIZE_THRESHOLD is reached 
> for a particular MethodHandle, it's LambdaForm is substituted with a 
> customized one, which has it's MethodHandle embedded. It allows JIT to 
> see actual MethodHandle during compilation and produce more efficient 
> code.
>
> This fix completely recovers Gbemu peak performance to pre-LambdaForm 
> sharing level.
>
> Testing: jck (api/java_lang/invoke), jdk/java/lang/invoke, nashorn 
> tests, nashorn/octane
>
> Thanks!
>
> Best regards,
> Vladimir Ivanov
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev



More information about the mlvm-dev mailing list