----- Mail original -----
> De: "Paul Sandoz" <paul.san...@oracle.com>
> À: "Da Vinci Machine Project" <mlvm-dev@openjdk.java.net>
> Envoyé: Vendredi 2 Février 2018 17:52:44
> Objet: Re: Performance of non-static method handles

> At some point in the future it may be possible, with the constant folding 
> work,
> to express the declaration of a MH locally but it gets stuffed in the constant
> pool (see amber constant-folding) if what the MH is derived from is constant.
> e.g. think of a language compiler intrinsic for ldc.

yes, 

> That may be improve some use-cases but if any input is not constant we are 
> back to the slower path.

you can put the non constant method handle into an inlining cache and 
magically, it becomes a constant
see https://gist.github.com/forax/1e0734f9aa976eab8a1fe982371a44a7

> 
> Paul.

Rémi

> 
>> On Feb 2, 2018, at 5:03 AM, Remi Forax <fo...@univ-mlv.fr> wrote:
>> 
>> Hi Charles,
>> usually, it's because a non constant method handle is not inlined into the
>> callsite,
>> so it's as fast as a function call or a method call when you ask to not 
>> inline.
>> 
>> A way to improve the perf is to profile the method handles that can be seen 
>> when
>> doing an invokeExact,
>> and inline them if they are few of them, making invokeExact acts as a 
>> n-morphic
>> inlining cache (with an identity check instanceof a class check).
>> 
>> Obviously, it's also easy to emulate think kind of cache with an 
>> invokedynamic,
>> i think Golo has such cache (Golo lambdas are plain method handle),
>> and if you want to go fully circular, you can simulate invokedynamic with an
>> invokeExact on a constant method handle :)
>> 
>> see you tomorrow,
>> Rémi
>> 
>> ----- Mail original -----
>>> De: "John Rose" <john.r.r...@oracle.com>
>>> À: "Da Vinci Machine Project" <mlvm-dev@openjdk.java.net>
>>> Envoyé: Vendredi 2 Février 2018 13:33:49
>>> Objet: Re: Performance of non-static method handles
>> 
>>> Vladimir Ivanov did some work a few years ago on MH customization for hot MH
>>> instances. It’s in the system. That should get better results than what you
>>> show. I wonder why it isn’t kicking in. You are using invokeExact right?
>>> 
>>>> On Feb 2, 2018, at 1:26 PM, Charles Oliver Nutter <head...@headius.com> 
>>>> wrote:
>>>> 
>>>> Hey folks!
>>>> 
>>>> I'm running some simple benchmarks for my FOSDEM handles talk and wanted to
>>>> reopen discussion about the performance of non-static-final method handles.
>>>> 
>>>> In my test, I just try to call a method that adds given argument to a 
>>>> static
>>>> long. The numbers for reflection and static final handle are what I'd 
>>>> expect,
>>>> with the latter basically being equivalent to a direct call:
>>>> 
>>>> Direct: 0.05ns/call
>>>> Reflected: 3ns/call
>>>> static final Handle: 0.05ns/call
>>>> 
>>>> If the handle is coming from an instance field or local variable, however,
>>>> performance is only slightly faster than reflection. I assume the only real
>>>> improvement in this case is that it doesn't box the long value I pass in.
>>>> 
>>>> local var Handle: 2.7ns/call
>>>> 
>>>> What can we do to improve the performance of non-static method handle
>>>> invocation?
>>>> 
>>>> - Charlie
>>>> _______________________________________________
>>>> mlvm-dev mailing list
>>>> mlvm-dev@openjdk.java.net
>>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>>> 
>>> _______________________________________________
>>> mlvm-dev mailing list
>>> mlvm-dev@openjdk.java.net
>>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
>> _______________________________________________
>> mlvm-dev mailing list
>> mlvm-dev@openjdk.java.net
>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
> 
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev@openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to