Condy for LambdaMetafactory?
Brian Goetz
brian.goetz at oracle.com
Fri Oct 20 20:59:27 UTC 2023
The optimization is appealing because condy linkage is cheaper than indy
linkage, and because it would allow more sharing between identical
lambdas in the same file (they'd map to the same condy, which would only
have to be resolved once.)
The main blocker was "hmm, LMF has some cornery spec issues, before we
add yet another bootstrap variant, let's look into those". I suppose we
might consider timing out on that particular investigation and
proceeding, though, if we had evidence that the startup was improved.
On 10/20/2023 4:29 PM, Luke Sandberg wrote:
> Classic story of development scope creep :P, thanks for confirming.
>
> Experimentally, I can trigger the special case in
> BootstrapMethodInvoker by just writing my own shim bootstrap method
>
> public static Object constantMetafactory(
> MethodHandles.Lookup lookup,
> String name,
> Class<?> type,
> MethodType samMethodType,
> MethodHandle implMethod,
> MethodType instantiatedMethodType)
> throws Throwable {
> return LambdaMetafactory.metafactory(
> lookup, name, methodType(type), samMethodType, implMethod,
> instantiatedMethodType)
> .getTarget()
> .invoke();
> }
>
> This allows me to retarget a number of invokedynamic callsites to
> constant dynamic and saves a small amount of classfile bytes.
>
> Do you think this is a valuable optimization? I'm guessing it would
> only make a difference in terms of bootstrapping.. perhaps condy is a
> simpler thing for the vm to manage than an indy+constantcallsite? Or
> perhaps I should just assume that since the vm engineers abandoned
> working on this, it wasn't particularly valuable?
>
> Thanks again!
> -Luke
>
>
>
> On Fri, Oct 20, 2023 at 1:14 PM Brian Goetz <brian.goetz at oracle.com>
> wrote:
>
> There was an experiment to translate non-capturing lambdas with
> condy, which was never integrated. As you observed, it requires
> changes to the bootstrap method signature; when we started adding
> the alternate bootstrap method, we realized there were some
> cleanups in the LMF spec/implementation we wanted to do, but these
> ended up getting back-burnered.
>
> On 10/20/2023 4:10 PM, Luke Sandberg wrote:
>> Hi, as part of a custom compiler I am working on I stumbled
>> across https://bugs.openjdk.org/browse/JDK-8198418 which
>> references invoking LambdaMetafactory.metafactory from a condy
>> instruction when there are no bound parameters.
>>
>> I see that there is support for this in BootstrapMethodInvoker:
>> https://github.com/openjdk/jdk/blob/77b2394c46bd304ffc0658cb758d971f1f2940b6/src/java.base/share/classes/java/lang/invoke/BootstrapMethodInvoker.java#L136C28-L136C55
>> <https://urldefense.com/v3/__https://github.com/openjdk/jdk/blob/77b2394c46bd304ffc0658cb758d971f1f2940b6/src/java.base/share/classes/java/lang/invoke/BootstrapMethodInvoker.java*L136C28-L136C55__;Iw!!ACWV5N9M2RV99hQ!PHbe4Pn7eya4v0van9dVMyuqlhZslUbTiduzn41fBiiqs4xBqFeqHXKvIxOOmvookopXoRjoZ-JzDvY$>
>>
>> But there is no method implementing this signature that i can find.
>>
>> Is this a half implemented idea from the original condy
>> implementation? Or am I missing something? Initially i thought
>> that BootstrapMethodInvoker might handle the signature delta, but
>> experimentally that is not true :D
>>
>> Thanks,
>> -Luke
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20231020/b2b69033/attachment-0001.htm>
More information about the amber-dev
mailing list